华清远见25072班网络编程day1

重点内容:

一、为什么需要网络编程

1.1 回顾IPC通信方式

1> 内核提供三种:

无名管道:pipe

有名管道:mkfifo

信号:kill、signal

2> System V提供三种:

消息队列:保证数据的不丢失性

共享内存:保证数据的实效性

信号灯集:主要完成多进程间的同步

3> 以上的通信方式中,都是同一主机之间的多个进程间的通信,依赖于内核空间(多个进程共享内核空间),但是要想实现不同主机间的进程的通信,上述方式就不能实现了

1.2 套接字通信的引入

所有进程间的通信当时,都有数据通信的载体。管道通信需要在内核空间中创建一个管道文件进行通信,消息队列在内核中创建一个消息队列载体,共享内存创建一个独立于任何一个进程的物理空间。套接字通信(socket通信)需要使用套接字来完成

二、网络发展历史

发展阶段:

1.APRAnet阶段---冷战产物

2.TCP/IP协议阶段--只有TCP和IP两个协议

3.osi开放系统互联模型(七层体系结构)

4.TCP/IP协议族(四层体系结构)

2.1 APRAnet阶段

阿帕网,是Internet的最早雏形

不能互联不同类型的计算机和不同类型的操作系统

没有纠错功能

2.2 TCP/IP两个协议阶段

在计算机网络中,要做到有条不紊的交换数据,需要遵循一些事先约定好的规则。这些规则明确规定了所交换的数据的格式以及有关的同步问题。为了进行网络中的数据交换而建立的规则、标准和约定称为网络协议(Protocol)

联网协议:定义如何在一个网络上传输信息的一组规则

TCP(传输控制协议)/IP(互联网协议)协议分成了两个不同的协议:

用来检测网络传输中差错的传输控制协议TCP

专门负责对不同网络进行互联的互联网协议IP

2.3 网络体系结构及OSI开放系统系统互联模型

2.3.1 网络体系结构概念

每一层都有自己独立的功能,单每一层都不可获取

通常把功能相近的协议组织在一起放在一层,协议栈。所以每一层中其实有多个协议

分层的好处:

1、各层之间独立,每一层不需要知道下一层如何实现,而仅仅只需要知道该层通过层间的接口所提供的服务

2、稳定,灵活性好,当任何一层发生变化时,只需要层间接口关系保持不变,而这层以上或以下层不受影响

3、易于实现和维护(知道是什么功能,就到指定层去查找)

4、促进标准化工作:每一层的功能及其所提供的服务都有了精确的说明。

5、结构上不可分割开:各层都可以采用最合适的技术来实现

2.3.2 OSI开放系统互联模型

OSI是由 ISO(国际标准化组织)提出的一个理想化模型。

OSI共有七层:

注意:从上往下说也行,从下往上说也可以,但是顺序不能变。

2.3.3 TCP/IP协议族(簇)的体系结构

TCP/IP协议簇是Internet事实上的工业标准。

TCP/IP网络体系结构四层:

应用层

传输层

网络层

链路层(网络接口和物理层)

虽然TCP/IP体系结构只有四层,但是做的事儿和OSI的七层是一样的。

TCP/IP四层结构 和 OSI开放系统互联模型七层 的对应关系。

linux内核五大功能:

内存管理:内存的分配和回收

进程管理:时间片轮转、上下文切换

文件管理:将一堆0和1转换成人类好识别的字符

设备管理:linux下一切皆文件

网络管理:网络协议栈的管理

协议:发送方和接收方都遵循的:数据发送及数据解析 的一组准则。

2.3.5 TCP/IP四层结构中常见的协议

应用层:

HTTP(Hypertext Transfer Protocol) 超文本传输协议:万维网的数据通信的基础

FTP(File Transfer Protocol) 文件传输协议:是用于在网络上进行文件传输的一套标准协议,使用TCP传输

TFTP(Trivial File Transfer Protocol) 简单文件传输协议:是用于在网络上进行文件传输的一套标准协议,使用UDP传输

SMTP(Simple Mail Transfer Protocol) 简单邮件传输协议:一种提供可靠且有效的电子邮件传输的协议

传输层:

TCP(Transport Control Protocol) 传输控制协议:是一种面向连接的、可靠的、基于字节流的传输层通信协议

UDP(User Datagram Protocol) 用户数据报协议:是一种无连接、不可靠、快速传输的传输层通信协议

网络层:

IP(Internetworking Protocol) 网际互连协议:是指能够在多个不同网络间实现信息传输的协议

ICMP(Internet Control Message Protocol) 互联网控制信息协议:用于在IP主机、路由器之间传递控制消息、ping命令使用的协议

IGMP(Internet Group Management Protocol) 互联网组管理:是一个组播协议,用于主机和组播路由器之间通信

链路层:

ARP(Address Resolution Protocol) 地址解析协议:通过IP地址获取对方mac地址

RARP(Reverse Address Resolution Protocol) 逆向地址解析协议:通过mac地址获取ip地址

注意:每层使用的协议,由下层决定,不能乱用。

三、TCP和UDP异同(笔试面试)

共同点:同属于传输层的协议,都用于网络传输

TCP ----> 稳定

1> 提供面向连接的,可靠的数据传输服务

2> 传输过程中,数据无误、数据无丢失、数据无失序、数据无重复

1、TCP会给每个数据包编上编号,该编号称之为序列号

2、每个序列号都需要应答包应答,如果没有应答,则会将上面的包重复发送直到正确为止

3> 数据传输效率低,耗费资源多

4> 数据收发是不同步的

1、为了提高效率,TCP会将多个较小,并且发送间隔短的数据包,沾成一个包发送,该现象称为沾包现象

2、该沾包算法称之为Nagle算法

5> TCP的使用场景:对传输质量比较高的以及传输大量数据的通信,在需要可靠通信的传输场合,一般使用TCP协议

例如:账户登录,大型文件下载的时候

UDP ----> 快速

1> 面向无连接的,不保证数据可靠的,尽最大努力传输的协议

2> 数据传输过程中,可能出现数据丢失、重复、失序现象

3> 数据传输效率高,实时性高

4> 限制每次传输的数据大小,多出部分直接忽略删除

5> 收发是同步的,不会沾包

6> 适用场景:发送小尺寸的,在接收到数据给出应答比较困难的情况下

例如:广播、通讯软件的音视频

四、网络编程基础相关的概念

4.1 字节序

1> 不同的主机在存储多字节整数时,由于CPU架构或者操作系统的不同,会分为大端存储和小端存储的主机

大端存储:地址低位存储的是数据的高位

小端存储:地址低位存储的是数据的低位

2> 当将一个小端存储的主机中的多字节整数,发送到一个大端存储的主机上时,即使网络传输中没有出现任何问题,但是由于架构的不同,导致得到的数据也是错误的。为了解决上面的问题,我们引入网络字节序的概念。

任何主机,将数据传输到网络上时,都先转换为网络字节序,当达到目的主机后,再转换为对方的主机字节序

规定:网络字节序为大端存储

3> 如何将主机字节序转换为网络字节序?

答:系统提供了相关主机字节序与网络字节序进行转换的函数

主机:host

网络:network

转换:to

4> 上述函数使用范围:

1、只应用于多字节整数

2、单字节整数,不需要进行转换,数据存储的基本单位就是字节

3、字符串也不适用于上面的函数

4.2 ip地址

1> ip地址(Internet Protocol Address):是主机或硬件在网络中的唯一标识,当连接到不同网络时,会分配不同的ip地址

2> 在网络中传输数据时,需要携带源ip地址和目的ip地址,就像寄快递时,需要填写寄件人和收件人的现居住地址一样

3> ip地址的分类

1、ip v4:采用的是4字节无符号整数表示的一个数字,取值范围【0,42亿多】

WAN(Wide Area Network):广域网

LAN(local area network):局域网

2、ip v6:采用的是16字节无符号整数表示的一个数字,取值范围【0, 2^128-1】

4> ip v4 地址划分:A、B、C、D、E五类网络

|------|----------------------------|-----------|------------|-------------|---|
| A类地址 | 1.0.0.0~127.255.255.255 | 2^7(网络号) | 2^24(主机号) | 已经保留不在供给 | |
| B类地址 | 128.0.0.0~191.255.255.255 | 2^14 | 2^16 | 名地址网管中心 |
| C类地址 | 192.0.0.0~223.255.255.255 | 2^21 | 2^8 | 校园网或企业网、家庭网 |
| D类地址 | 224.0.0.0~239.255.255.255 | | | 组播地址 |
| E类地址 | 240.0.0.0~255.255.255.255 | | | 保留 |

5> 一个局域网下的特殊的IP地址

1、网络号 + 0:表示该网络,不分配给任何主机使用

2、网络号 + 255:广播地址,不分配给任何主机使用

3、网络号 + 1:默认为网关地址

4、127.0.0.1:本地环回地址,用于主机内部自测使用

5、0.0.0.0:表示当前局域网的任意一个主机号

6、255.255.255.255:一般表示广播

6> ip地址编程中使用的是4字节无符号整数,但是,生活中采用的是点分十进制字符串,为了方便记忆,人们将4字节的每一个字节分别转换为十进制数据,然后使用点(.)隔开表示。

但是,网络传输中,使用的依然是4字节无符号整数,此时,就需要进行点分十进制与4字节无符号整数进行转换

系统提供相关转换函数

4.4 端口号(重要) ---> port

1> 为了区分同一主机上的多个进程,使用端口号来进行处理

2> 端口号是一个2字节的无符号整数存储,取值范围【0,65535】

3> 网络通信中两个决定性因素:IP + 端口号

4> 端口号的分类:

0~1023端口我们编程时候不要使用,是那些"VIP"应用程序占了

TCP 21端口:FTP文件传输服务

TCP 23端口:TELNET终端仿真服务

TCP 25端口:SMTP简单邮件传输服务

TCP 110端口:POP3邮局协议版本3

TCP 80端口:HTTP超文本传输服务

TCP 443端口:HTTPS加密超文本传输服务

UDP 53端口:DNS域名解析服务

UDP 69端口:TFTP文件传输服务

特殊的端口函数,存储在linux中的 /etc/services文件中

TCP和UDP的端口号是相互独立的

可以使用的:1024~49151,就是我们平时编写服务器使用的端口号

临时端口号:49152~65535,这部分是客户端运行时候动态选择的

4.5 域名解析

由于使用IP地址来指定计算机不方便人们记忆,且输入时候容易出错,用字符标识网络种计算机名称方法。

这种命名方法就像每个人的名字,这就是域名(Domian Name)

域名服务器(Domain Name server):用来处理IP地址和域名之间的转换。

域名系统(Domain Name System,DNS):域名翻译成IP地址的软件

一个域名,可以绑定多个ip

域名结构:

例如域名 http: //www.baidu.com.cn 从右向左看

cn为高级域名,也叫一级域名,它通常分配给主干节点,取值为国家名,cn代表中国

com为网络名,属于二级域名,它通常表示组织或部门

中国互联网二级域名共40个,edu表示教育部门,com表示商业部门,gov表示政府,军队mil等等

baidu为机构名,在此为三级域名,表示百度

www:万维网world wide web,也叫环球信息网,是一种特殊的信息结构框架。

http:使用的是超文本传输协议


作业:

1、将课堂上的代码,重新敲3遍,主要练习主机字节序与网络字节序转换、ip地址点分十进制与网络字节序转换

程序源码:

#include<25072head.h>

int main(int argc, const char *argv\[\])

{

int num = 0x12345678;

int num_network = htonl(num);

printf("num_network = %#x\n", num_network); //

return 0;

}

程序源码:

#include <25072head.h>

int main(int argc, const char *argv\[\])

{

//定义一个指针,记录ip地址

char *ip="192.168.109.15";

//调用函数将点分十进制转换为网络字节序

uint32_t ip_network=inet_addr(ip);

//输出结果

printf("ip_network=%#x\n",ip_network);

return 0;

}

2、细致绘制思维导图(第二天提问)

3、牛客网刷题,可以尝试刷计算机网络部分

相关推荐
淼淼爱喝水4 分钟前
DVWA靶场命令注入漏洞检测实验
网络·安全·靶场·dvwa
liulilittle6 分钟前
Linux SS快速诊断命令
linux·运维·智能路由器
晚风吹红霞24 分钟前
Linux下的趣味编程 —— 进度条、Git版本控制与GDB调试实战
linux·运维·git
nan madol26 分钟前
Rocky Linux 9.5 部署 Percona XtraDB Cluster (PXC) 集群
linux·运维·服务器
zincsweet26 分钟前
Linux 命名管道(FIFO)详解:原理分析、源码封装与通信流程图解
linux·服务器·c++·流程图
linux修理工29 分钟前
使用 virt-install 命令行快速创建 KVM 虚拟机(以 CentOS 7 为例)
linux·运维·centos
|_⊙31 分钟前
进程间通信(System V 标准下的多种通信方式)
linux·运维·服务器
KaMeidebaby33 分钟前
卡梅德生物技术快报|免疫共沉淀 - Co-IP 实验在转录因子 ATF3/Smad4 蛋白互作研究中的应用实例解析
网络·人工智能·网络协议·tcp/ip·其他·算法·新浪微博
林熙蕾LXL38 分钟前
IPC使用套接字进程通讯
网络
zincsweet1 小时前
C++ 实现进程池:主从架构、管道通信与任务调度
linux·c++