网站首页 > 文章精选 正文
大家好,我是IT售前工程师Bernie。
本文主要介绍计算机网络中数据通信的TCP三次握手和四次挥手。
在正式讲解之前,我们假设有两台主机需要通信,客户机A和B。
三次握手
第1次握手
A发送一个请求连接的数据包给B,数据包包含
- IP请求头(网络层, 包含数据的源IP地址和目标IP地址);
- TCP头部(传输层, 包含序列码Seq=a、请求标志位SYN = 1和确认码Ack=0)。
注意,这时因为还没建立连接,所以数据包里面是没有实际上要传送的数据的。
第2次握手
当B接收到A的请求连接数据后,也同样发送一个数据包,里面包含
- IP请求头(网络层,包含源IP地址和目标IP地址)
- TCP请求头(传输层,包含序列码Seq=b,确认码ACK和请求标志位SYN)
注意:
1)确认码是A的数据包确认码+1了,这里的SYN是B的请求标志位。
2)第二次握手主要完成两个目标:目标1是将Ack+1,告诉A “我已经确认了你的请求,我方同意建立连接。” 与此同时,B也发送了一个自己的Ack,目的是请求A的连接确认,同时SYN置位(赋值1)。
第3次握手
当B的请求包到达A时,A看到对方已经同意了自己的请求,可以建立连接。
那么,A还要告诉B:我也同意你的连接请求。于是A将B的Ack+1,序列码也+1,SYN置位,回传给B。
当B接收到回传的消息后,第三次握手也就完成,通道打通,可以发送数据了。
三次握手的目的
第1次:A告诉B,我要给你连接,请同意。
第2次:B告诉A,我已同意你的连接请求,请确认。另外,也请同意我的连接请求。
第3次:A告诉B,我已知道你同意了我的连接请求,另外,我也允许你的连接请求,请知晓。
数据通信
经过三次握手后,双方就建立了稳定的连接,可以自由传输数据了。
双方都会通过 window 字段告诉对方本端最大能够接受的字节数(也就是缓冲区大小)。发送方也会根据接受方宣告的字节数进行数据的接收。
需要注意的是:如果B由于进程占用负荷较大时,可能一次接收不了这么多数据了。那么,它发送数据给A,比如win=1,告诉A“老哥,别一次发这么多了,我只能同时接收一个!” 后面A就会一次发送1个给B。
数据回传时,也会有seq+1,Ack+1的操作,告诉对方已经接收到数据了。
四次挥手
当数据发送告一段落时,就考虑中断连接了,就有了四次挥手的“告别仪式”。
第1次挥手
A发送一个请求连接的数据包给B,告诉B:我请求与你方断开连接。请求数据包含
- IP请求头(网络层, 包含数据的源IP地址和目标IP地址);
- TCP头部(传输层, 包含序列码Seq=u、结束连接的请求标志位FIN = 1)。
注意,这时因为数据已经传送完了,所以数据包里面是没有实际上要传送的数据的。FIN码就是用来关闭客户到服务器的数据传送的请求码。
第2次挥手
B发送一个确认断开连接的数据请求给A,告诉A:你的断连请求已收到,可以断连。回复信息包含:
- IP请求头(网络层, 包含数据的源IP地址和目标IP地址);
- TCP头部(传输层, 包含序列码Seq=u+1、结束连接的确认码ACK=1,FIN = 1)。
注意,服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
第3次挥手
B发送一个请求连接的数据包给A,告诉A:我请求与你方断开连接。请求数据包含
- IP请求头(网络层, 包含数据的源IP地址和目标IP地址);
- TCP头部(传输层, 包含序列码Seq=w、结束连接的请求标志位FIN = 1)。
注意,FIN码就是用来关闭客户到服务器的数据传送的请求码。
第4次挥手
A发送一个确认断开连接的数据请求给B,告诉B:你的断连请求已收到,可以断连。回复信息包含:
- IP请求头(网络层, 包含数据的源IP地址和目标IP地址);
- TCP头部(传输层, 包含序列码Seq=w+1、结束连接的确认码ACK=1,FIN = 1)。
注意,服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
四次挥手的目的
第1次挥手:A告诉B,数据传输完毕,我方要求与你断开连接,请确认。
第2次挥手:B告诉A,我已同意你的断连请求,请知悉。
第3次挥手:B告诉A,我方也要求与你断开连接,请确认。
第4次挥手:A告诉B,同意!
猜你喜欢
- 2025-02-03 「ModbusTCP协议详解」内容有点多,但讲得很详细
- 2025-02-03 tcpdump抓udp包示例 及IP、TCP、UDP协议格式
- 2025-02-03 网络隐蔽通道构建关键技术研究综述
- 2025-02-03 为什么TCP要做成流式协议,而非包?
- 2025-02-03 计算机网络中MSS和MTU的区别(mss与mtu区别及对应关系)
- 2025-02-03 存储FC 网络(简述存储网络引入fc后的优点有哪些)
- 2025-02-03 苹果iphone12充电器品牌选择哪个 充电器功率推荐
- 2025-02-03 作为一名架构师,需要掌握的一些基础网络知识
- 2025-02-03 计算机网络参考模型(计算机网络参考模型有哪些)
- 2025-02-03 关于TCP协议的基础知识(关于tcp/ip协议)
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)