美文网首页
TCP三次握手

TCP三次握手

作者: Sharkchilli | 来源:发表于2020-09-19 11:12 被阅读0次

OSI七层模型和TCP/IP四层模型

OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型。
由于OSI七层模型过于复杂,在实际应用时采用了TCP/IP四层模型

image.png

OSI和TCP/IP对比

OSI七层模型 TCP/IP四层模型 对应网络协议
应用层(Application) 应用层 HTTP、TFTP, FTP, NFS, WAIS、SMTP
表示层(Presentation) 应用层 Telnet, Rlogin, SNMP, Gopher
会话层(Session) 应用层 SMTP, DNS
传输层(Transport) 传输层 TCP, UDP
网络层(Network) 网络层 IP, ICMP, ARP, RARP, AKP, UUCP
数据链路层(Data Link) 数据链路层 FDDI, Ethernet, Arpanet, PDN, SLIP, PPP
物理层(Physical) 数据链路层 IEEE 802.1A, IEEE 802.2到IEEE 802.11

这里我们重点关注应用层、传输层、网络层的一些信息

TCP数据报格式

传输层的TCP协议会将数据打包成以下格式

image.png
我们的三次握手就是围绕着上图的一些数据进行的。
32位序号:这个是随机生成的,主要用于确认上次的数据是否收到
携带标志位:SYN(请求建立连接)ACK(应答)FIN(断开连接)

TCP三次握手

image.png
1.客户端发出连接请求
此时SYN标志位为1表示连接请求。假定生成的序号为1000,这个序号在网络通讯中用作临时的地址,每发一个数据字节,这个序号要加1,这样在接收端可以根据序号排出数据包的正确顺序,也可以发现丢包的情况,另外,规定SYN位和FIN位也要占一个序号,这次发数据大小为10,由于发了SYN位,因此下次再发送ACK应答包应该用序号(1000+10+1)1011。

2.服务器端回应客户端
这次报文段同时带ACK标志和SYN标志。它表示对刚才客户端SYN的回应;同时又发送SYN给客户端,询问客户端是否准备好进行数据通讯。服务器发出段2,也带有SYN位,同时置ACK位表示确认,确认序号是1011,表示“我接收到序号1000及其以前所有的段,请你下次发送序号为1011的段”,也就是应答了客户端的连接请求,同时也给客户端发出一个连接请求,序号为2000

3.客户端再次回应服务器
本次是对服务器的连接请求进行ACK应答,确认序号是2001。

在这个过程中,客户端和服务器分别给对方发了连接请求,也应答了对方的连接请求,其中服务器的请求和应答在一个段中发出,因此一共有三个段用于建立连接,称为“三方握手(three-way-handshake)”。在建立连接的同时,双方协商了一些信息,例如双方发送序号的初始值、最大段尺寸等。

wireshark抓包观察

为了更好的理解三次握手我们使用wireshark进行抓包观察
第一次握手包

image.png
可以看到SYN的标志位为1,序列号为0。数据大小(TCP Segment len)为0,这样下次ack的回应包就应该有ACK和SYN标志位,并且确认序列号为1
第二次握手
image.png
ACK和SYN都为1,确认序列号和我们预料的是一样的。此次SYN的序列号为0,数据大小也为0,所以下次ack回应的确认序列号应该为1
image.png
至此TCP三次握手就分析结束了

相关文章

网友评论

      本文标题:TCP三次握手

      本文链接:https://www.haomeiwen.com/subject/vtbmektx.html