以下文章仅为个人学习笔记,如有错误敬请谅解!
-
协议地图
传输层协议:
传输层协议接收来自应用层协议的数据,封装上相应的传输层头部,帮助其建立“端到端”的连接。
传输层的PDU被称为段(Segment)常用的协议有tcp、udp等。
tcp协议是一种面向连接的、可靠的(三次握手、四次挥手)传输层通信协议,由IEIF的RFC 793定义。
UDP协议是一种简单的无连接的、不可靠的传输层协议,由IEIF的RFC 768定义。
1.tcp协议
报文格式:
Source Port:源端口号(16bit,2字节)
Destination Port:目的端口(16bit,2字节)
Sequence Number:序列号(32bit),表示发出报文的编号
Acknowledgement Number:确认号(32bit),收到的第几个报文
确认号和序列号保证了数据的有序和正确传输!!!
Data Offset:头部长度
Reserved:保留字段(全填0)
Control bits:(6bit)控制字节,包括URG、ACK(确认)、PSH、RST(重新建立连接)、SYN(连接同步)、FIN(完成发送标识)
Windows:滑动窗口
TCP滑动窗口机制:
在传输数据时,如果对方传输的数据过大,就会将其打包分发,滑动窗口机制就是用来告诉对方自己有几个缓存空间。
图中右边表示接收方三个窗口,其中每个窗口叫做一个mss字段,默认是1460bit。
每个窗口传输独立,如果某个窗口在传输中丢包,对方会将该数据包后面的数据重传,即使在其他窗口已经接受过该数据包,确保数据包的有序性。
tcp如何建立连接(三次握手):
任何基于tcp的应用,在传输数据前都会进行三次握手(http1.1为了保证网页的响应速度,在多次请求数据时只需一次三次握手就可以实现多次数据传输)
断开连接(四次挥手):
2.udp协议
Source Port: 标识哪个应用程序发送(发送进程)。
Destination Port: 标识哪个应用程序接收(接收进程)。
Length: UDP首部加上UDP数据的字节数,最小为8。
Checksum: 覆盖UDP首部和UDP数据,是可选的。
data octets: UDP负载,可选的。
udp 传输数据时双方不进行数据确认,因此是无连接的、非可靠的。
3.ICMP协议:
用来传递差错、控制、查询等信息(例如网页中常见的404、403错误)。
报文格式:
字段 | 长度 | 含义 |
---|---|---|
Type | 1字节 | 报文类型,用来标识报文。 |
Code | 1字节 | 代码,提供报文类型的进一步信息。 |
Checksum | 2字节 | 校验和,使用和IP相同的加法校验和算法,但是ICMP校验和仅覆盖ICMP报文。 |
Message Body | 可变 | 字段的长度和内容,取决于消息的类型和代码。 |
(部分type值与code对应的含义)
类型Type | 代码Code | 描述 |
---|---|---|
0 | 0 | 回显应答(ping应答) |
3 | 0 | 网络不可达 |
3 | 1 | 主机不可达 |
3 | 2 | 协议不可达 |
4 | 0 | 源端被关闭 |
5 | 0 | 对网络重定向 |
4.ip协议:
IP协议全称为“网际互连协议(Internet Protocol)”,是网络层协议。
ip协议是tcp/ip最核心的协议簇,提供不可靠的、无连接的、尽力而为的服务。
IP地址
IP地址一共四组八位的二进制数组成
0000 0000 0000 0000 0000 0000 0000 0000
为了记忆方便,常用点分十进制,如192.168.1.1
IP地址分为网络号和主机号:
掩码:用来标识网络号的位数
例如192.168.1.1和192.168.1.2,假如其掩码是24位(255.255.255.0)
1100 0000 1010 1000 0000 00001 0000 0001
1100 0000 1010 1000 0000 00001 0000 0001
1111 1111 1111 1111 1111 1111 0000 0000
掩码位为1的所对应的即为网络号,上述中网络号为1100 0000 1010 1000 0000 00001 0000 0000 (192.168.1.0)
除去网络号位置即为主机号,一个网络号即表示一个网段
网段:
网段分为以下几类
- A类:0.0.0.0到127.255.255.255。
- B类:128.0.0.0到191.255.255.255。
- C类:192.0.0.0到223.255.255.255。
- D类:224.0.0.0到239.255.255.255。
- E类:240.0.0.0到247.255.255.255。
为了防止上述网段划分产生的地址分配不均(过多或者过少),可以采用可变子网掩码标识网段。
通配符(也有称反掩码的):
表示一个IP地址的集合。例如通配符0.0.0.255,假如对应的ip网段是192.168.1.0,
1100 0000 1010 1000 0000 00001 0000 000
0000 0000 0000 0000 0000 0000 1111 1111
通配符位数为1的位数可以改变,为0不能改变,上述就表示192.168.1.0-255这些地址集合
(和网段的区别是这些地址集合可以不是连续的)
ip报文格式
字段 | 长度 | 含义 |
---|---|---|
Version | 4比特 |
|
IHL | 4比特 | 首部长度,如果不带Option字段,则为20,最长为60,该值限制了记录路由选项。以4字节为一个单位。 |
Type of Service | 8比特 | 服务类型。只有在有QoS差分服务要求时这个字段才起作用。 |
Total Length | 16比特 | 总长度,整个IP数据报的长度,包括首部和数据之和,单位为字节,最长65535,总长度必须不超过最大传输单元MTU。 |
Identification | 16比特 | 标识,主机每发一个报文,加1,分片重组时会用到该字段。 |
Flags | 3比特 | 标志位: IP Flag字段格式 0 1 2 +-----+------+------+ | 0 | DF | MF | +-----+------+------+
|
Fragment Offset | 13比特 | 片偏移:分片重组时会用到该字段。表示较长的分组在分片后,某片在原分组中的相对位置。以8个字节为偏移单位。 |
Time to Live | 8比特 | 生存时间:可经过的最多路由数,即数据包在网络中可通过的路由器数的最大值。 |
Protocol | 8比特 | 协议:下一层协议。指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。 常见值:
|
Header Checksum | 16比特 | 首部检验和,只检验数据包的首部,不检验数据部分。这里不采用CRC检验码,而采用简单的计算方法。 |
Source Address | 32比特 | 源IP地址。 |
Destination Address | 32比特 | 目的IP地址。 |
Options | 可变 | 选项字段,用来支持排错,测量以及安全等措施,内容丰富(请参见表2)。选项字段长度可变,从1字节到40字节不等,取决于所选项的功能。 |
Padding | 可变 | 填充字段,全填0。 |