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

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协议会将数据打包成以下格式

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

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进行抓包观察
第一次握手包

可以看到SYN的标志位为1,序列号为0。数据大小(TCP Segment len)为0,这样下次ack的回应包就应该有ACK和SYN标志位,并且确认序列号为1
第二次握手

ACK和SYN都为1,确认序列号和我们预料的是一样的。此次SYN的序列号为0,数据大小也为0,所以下次ack回应的确认序列号应该为1

至此TCP三次握手就分析结束了
网友评论