笔记 TCP/IP协议栈

一、

TCP/IP协议与七层ISO模型的对应关系,大致如下图所示:

二、OSI七层参考模型 --- 定义了网络互连的七层框架,每一层实现各自的功能和协议,并完成与相邻层的接口通信:

三.TCP/IP的物理层

1.数据到达物理层之后,物理层会根据介质的不同,将数字信号换成光信号、电信号或者是电磁波信号

2.物理层的PDU被称为比特流

物理层位于模型的最底层:

1.负责比特流在介质上的传播

2.规范了线缆、针脚、电压、接口等物理特性规范

3.常见的传播物质有:双绞线、光纤、电磁波等。

四.TCP/IP的数据链路层

以以太网数据帧格式:Ethernet_2格式、IEE802.3格式

D.MAC 目的mac S.MAC源目mac

FCS:帧校验序列/校验和 校验前面数据的完整性

数据帧发送方式:单播(一对一传播)、广播(一对多传播)、组播(一对一组传播)

1.版本

占4比特。用来表明IP协议实现的版本号, IPV4,IPV6,当前一般为IPv4。

2.头部信息

IP报头的长度。固定部分的长度(20字节)和可变部分的长度之和。共占4位。最大为1111,即10进制的15,代表IP报头的最大长度可以为15个32bits(4字节),也就是最长可为15*4=60字节,除去固定部分的长度20字节,可变部分的长度最大为40字节。

3.服务类型

TOS/QOS(做差分服务),QOS标记数越大越先转发

4.总长度

IP报文的总长度。报头的长度和数据部分的长度之和。

5.标识

唯一的标识主机发送的每一分数据报。通常每发送一个报文,它的值加一。当IP报文长度超过传输网络的MTU(最大传输单元)时必须分片,这个标识字段的值被复制到所有数据分片的标识字段中,使得这些分片在达到最终目的地时可以依照标识字段的内容重新组成原先的数据。

6.标志

共3位。R、DF、MF三位。目前只有后两位有效,DF位:为1表示不分片,为0表示分片。MF:为1表示"更多的片",为0表示这是最后一片。

7.片位移

本分片在原先数据报文中相对首位的偏移位。(需要再乘以8)

8.TTL--生存时间

IP报文所允许通过的路由器的最大数量。每经过一个路由器,TTL减1,当为0时,路由器将该数据报丢弃。TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64。发送 ICMP 回显应答时经常把 TTL 设为最大值 255。

9.协议

指出IP报文携带的数据使用的是那种协议,以便目的主机的IP层能知道要将数据报上交到哪个进程(不同的协议有专门不同的进程处理)。和端口号类似,此处采用协议号,TCP的协议号为6,UDP的协议号为17。ICMP的协议号为1,IGMP的协议号为2.

10.头部校验和

计算IP头部的校验和,检查IP报头的完整性。

11.源IP地址

标识IP数据报的源端设备。

12.目的IP地址

标识IP数据报的目的地址。

五.TCP/IP的传输层

TCP(传输控制协议)
TCP是一种面向连接的、可靠的传输层协议。它通过建立连接、传输数据和终止连接的过程,确保数据能够按顺序、无差错地传输。

TCP协议报文格式

1.源端口号 --- 源端口号表示报文的发送端口,占16位。源端口和源IP地址组合起来,可以标识报文的发送地址。

2.目的接口号 --- 目的端口号表示报文的接收端口,占16位。目的端口和目的IP地址相结合,可以标识报文的接收地址。

3.序号(Sequence Number)--- TCP传输过程中,在发送端出的字节流中,传输报文中的数据部分的每一个字节都有它的编号,用来作为标识,记录本地发送的数据量大小。占32位,发起方发送数据时,都需要标记序号。序号和SYN的值有关,当SYN = 1时,当前为连接建立阶段。

4.确认序号(Acknowledgment Number)--- 确认数据是否收到,期望本地接收的下一个序号。

5.头部长度 --- 该字段占用4位,用来表示TCP报文首部的长度,单位是4bit位。

6.保留6位 --- 头部长度后面预留的字段长度为6位,作为保留字段,暂时没有什么用处。

7.控制标识 --- 控制标志共6个bit位,具体的标志位为:URG、ACK、PSH、RST、SYN、FIN。6个标志位的说明,如下表所示

URG URG=1,代表紧急指针位有效

ACK ACK=1,代表确认序号有效
PSH 推送位,PSH=1,从这个报文之前接受到的所以报文进行处理
RST 复位
SYN 同步位,SYN=1,代表要和你建立连接
FIN 终止位,FIN=1,代表终止连接
8.窗口大小 --- 长度为16位,共2个字节。此字段用来进行流量控制。流量控制的单位为字节数,这个值是本端期望一次接收的字节数。

9.校验和计算 --- 长度为16位,共2个字节。对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,接收端用于对收到的数据包进行验证。

10.紧急指针 --- 长度为16位,共2个字节。它是一个偏移量,和SN序号值相加表示紧急数据最后一个字节的序号。

以上十项内容是TCP报文首部必须的字段,也称固有字段,长度为20个字节。

11.可选项和填充部分 --- 最常见的选项字段是MSS(最大传输段),每个连接方通常都在通信的第一个报文段(SYN标志为1的那个段)中指明这个选项字段,表示当前连接方所能接受的最大报文段的长度。MSS=MTU -IP头部 - TCP头部

TCP分段 --- 与IP分片相同;

因为TCP为了保证自己的可靠性,具备一个重传机制,如果数据在网络层分片,这些片段在传输过程中丢失时,TCP没有办法进行重传(因为其不知道分片结果),所以为了满足重传机制,TCP提前分段,让传输给网络 层的数据满足网络层MTU的要求即可。

MSS(最大传输段) = MTU - IP头部 - TCP头部

可靠性

1.应用数据分割成TCP认为最适合发送的数据块(靠MSS选项控制)。

2.重传机制 --- 当本地发送一个报文后,如果较长时间没有得到回复,则会重新发送一个报文。

3.确认机制 --- 每传输一次报文,则必须收到对方的确认报文,才可以发送自己的下一个报文。

4.对首部和数据进行校验。

5.排序机制 --- 按照序列号的顺序进行排序。

6.接收端丢弃重复的数据。

7.流控机制(滑动窗口机制) --- TCP还提供流量控制,主要是通过滑动窗口来实现流量控制。

面向连接

如果双方发送的报文中,没有携带数据,但是也会消耗一个序列号,但是如果连续发送的信息都没
有携带数据,也仅仅只会消耗一个序列号 。
三次握手

第一次握手:客户端向服务端发送报文,发送一个SYN帧来主动打开传输通道,该帧的SYN标志位被设置为1,同时会带上seq序列号,该seq是一个随机值

第二次握手:服务端接收到客户端的报文,发出ACK标志位被设置为1,其确认序号ackeq为seq+1,SYN标志位被设置为1,同时会带上seq序列号,该seq是一个随机值

第三次握手:客户端接收到服务段的回复报文,该ACK标志位被设置为1,其确认序号ackeq值被设置为seq序列号+1

四次挥手

第一次挥手:主动断开方(可以是客户端,也可以是服务器端),向对方发送一个FIN结束请求报文,此报文的FIN位被设置为1,并且正确设置seq(序列号)(为之前的seq+数据量)和ACK(确认号)

第二次挥手:正常情况下,在收到了主动断开方发送的FIN断开请求报文后,被动断开方会发送一个ACK响应报文,报文的ackeq(确认号)值为断开请求报文的seq(序列号)加1

第三次挥手:在发送完成ACK报文后,被动断开方还可以继续完成业务数据的发送,待剩余数据发送完成后,被动断开方会向主动断开方发送一个FIN+ACK结束响应报文

第四次挥手:主动断开方收在到FIN+ACK断开响应报文后,还需要进行最后的确认,向被动断开方发送一个ACK确认报文,然后,自己就进入TIME_WAIT状态,等待超时后最终关闭连接。处于TIME_WAIT状态的主动断开方,在等待完成2MSL的时间后,如果期间没有收到其他报文,则证明对方已正常关闭,主动断开方的连接最终关闭。

UDP协议 --- 用户数据报协议

是一个无连接的数据报协议,是一个"尽力传递"和"不可靠"协议,不会对数据包是否已经到达目的地进行检查,并且不保证数据包按顺序到达。
总体来说,TCP协议传输效率低,但可靠性强;UDP协议传输效率高,但可靠性略低,适用于传输可靠性要求不高、体量小的数据。

相关推荐
学传打活10 天前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续3)
微信公众平台·1024程序员节·汉字·昆仑正义文化
学传打活15 天前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
fangzhanpeng16823 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心25 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u0103055271 个月前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u0103055271 个月前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝1 个月前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u0103055271 个月前
Java图像处理实战指南
人工智能·1024程序员节
u0103055271 个月前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u0103055271 个月前
Java实用类应用精讲
人工智能·1024程序员节