TCP/IP协议

摘要

        网络之间需要传输信息,那么各个计算机设备应该怎样传输信息,这就是网络协议定义的内容了。对于这个标准制定,主要有两个协议:TCP/IP模型和OSI模型。注意TCP/IP是现在网络设备已大量使用的协议,而OSI是个参考模型!且TCP/IP先被提出使用,OSI是后续提出来的。

 OSI模型

        主要分为七层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层,它们的作用以及使用的实际协议如下: TCP/IP协议_第1张图片

 TCP/IP模型

        该模型主要分4层:应用层、传输层、网络层、网络接口层。

应用层:定义了应用程序的网络传输协议。比如HTTP、FTP、SSL、POP3、SMTP协议。一般该协议是应用程序实现,广大应用开发者一般也是只能在这一层定义新协议或修改协议。

传输层:建立端到端的连接。主要有:TCP或UDP协议。

网络层:寻址和路由选择。主要有:IP协议(IPv4、IPv6)、ICMP、ARP等协议。

网络接口层:定义物理介质访问以及比特传输,主要有:Ethernet、IEEE 802.2协议。

TCP的三次握手

        这里的TCP指的是传输层的TCP,所有基于它传输的协议都要经过三次握手,比如HTTP协议。浏览器组装好http协议的数据后,发送给服务端,服务端会和浏览器先进行三次握手,浏览器才会把http数据发送给服务器。

        具体握手过程如下:

TCP/IP协议_第2张图片

说明:ACK为确认,SYN为同步序号,seq为随机数。

规定:SYN=1,ACK=0表示申请连接,SYN=1,ACK=1表示同意连接

第一次握手:客户端发送SYN和ACK等报文向服务器申请连接,这里发了随机数看服务器是否能正确应答。

第二次握手:服务器发送同意连接,并给出应答,并发出自己的随机数看客户端能否正确应答。

第三次握手:客户端发出同意连接并给出正确的应答。

        之所以要第三次握手,原因有以下两点:

        1、因为TCP是双向传输的,两次握手能让客户端确定服务器能收到它发的消息,但无法让服务器确定客户端能否收到它发的消息。

就好比我们通话:

张三:你能听到我说话吗?

李四:我能听到,你能听到我说话吗?

张三:我能听到。

假如最后一步没了,那么李四(服务器)无法确定张三能否收到他发出的信息!

        2、避免失效的请求重新将客户端和服务器连接。

        比如客户端发起第一次请求,由于网络或CPU时间片原因,请求被滞留,客户端等待超时又向服务器发送请求,这次请求成功并双方建立连接发送数据,之后业务完成关闭连接。而此时第一次的连接请求又好了,发送给服务器,服务器响应了后就直接与客户端建立连接了!若有第三次握手,服务器还会等待客户端应答的,客户端此时是关闭状态显然不会去应答,所以第三次握手能避免这种无效连接的建立。

TCP的四次挥手

        TCP是全双工,因此客户端和服务器都要把数据发完,然后确认关闭。这里的挥手,客户端和服务器都可以先发起,它们挥手的状态是互通的。

具体挥手过程如下:

TCP/IP协议_第3张图片

第一次挥手:服务端发送FIN=1,seq=x以及最后的数据给客户端。

第二次挥手:客户端收到FIN标识后,知道另一端要关闭了,便发送ACK=1,seq=y,ack=x+1以及最后的数据给服务端。

第三次挥手:客户端发送完数据后边发送FIN=1,ACK=1,seq=w,ack=x+1给服务端,告诉服务端这边也要关闭了。

第四次挥手:服务端接收到客户端的FIN后,边发送ACK=1,seq=x+1,ack=w+1给客户端。客户端收到消息后直接关闭。而服务端等待设定时长后关闭。

        注意,这里的第二次的应答和数据与第三次的结束标识之所以区分开,是有可能发生第三次握手后,第四次的握手因网络等原因没有发送到客户端,因此需要进行第三次挥手再次发送FIN和seq进行确认,所以要把第三次握手单独提取出来。

        图中服务端最后的等待2MSL也是防止第四次握手的报文因网络等原因传输失败,导致客户端一直无法收到ACK无法关闭,因此设计了客户端等待第四次握手超时会重发第三次握手。所以服务端要等待2MSL(2分钟)。若真的再有三次握手,则直接再发送第四次握手让客户端关闭。

你可能感兴趣的:(计算机基础,tcp/ip,网络,网络协议)