微信公众号怎么做网站的,网站名称怎么填写,近五年网站开发参考文献,保山网站建设服务一、TCP协议介绍
TCP协议是可靠的、面向连接的、基于字节流的传输层通信协议。
TCP的头部结构#xff1a; 源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去;#xff08;tcp是传输层的协议#xff0c;端与端之间的数据传输#xff0c;在TCP和UDP协议当中不会体现出I…一、TCP协议介绍
TCP协议是可靠的、面向连接的、基于字节流的传输层通信协议。
TCP的头部结构 源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去;tcp是传输层的协议端与端之间的数据传输在TCP和UDP协议当中不会体现出IP
32位序号一次TCP通信从TCP连接建立到断开过程中某一个传输方向上的字节流的每个字节的编号。
32位确认号对另一方发送来的TCP报文段的响应即告知发送端期待发送的下一条序号。其值是收到的TCP报文段的序号值加1。
4位TCP报头长度表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP头部最大长度是15 * 4 60
16位窗口大小告诉发送方字节的接收能力
6位标志位 16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含TCP首部, 也包含TCP数据部分简单来说就是检验TCP数据是否在传输过程中失真。
16位紧急指针: 标识哪部分数据是紧急数据。
二、三次握手
面向连接指TCP连接的本质是在建立三次握手时期通信双方会协商很多连接当中的数据。对于TCP而言如果通信双方不建立连接则不能进行通信。
在listen()方法中第二个参数就是指定已完成三次握手队列的长度。
TCP在建立连接的时候客户端就会先给服务器端发送一个TCP报文段然后服务器端再给客户端恢复一个TCP报文段最后客户端再给服务器端回复一共三次。
三次握手的具体过程是
第一次握手当客户端执行connet()这行代码的时候开始进行三次握手此时客户端就会在传输层给服务端发送一个SYN报文SYN报文中有一个序号这个序号就是自己的序号32位序号假设这个序号为i。
第二次握手服务器收到之后会给客户端一个回复回复的是SYN报文此报文中也有一个自己的序号假设这个序号为j还有ACK报文是一个确认号这个确认号就是对刚刚客户端发来的序号进行确认由于客户端发来的序号值为i则这个确认号就为i1服务器向客户端回复的时候序号和确认号可以写到一个报文中。
第三次握手客户端收到服务器端的回复之后再给客户端发送一个报文ACK进行确认对刚刚服务器返回回来的序号进行确认由于服务器回复到客户端的序号为j所以确认的序号应该为j1。
具体过程如下图所示 注意三次握手发生在建立连接的时候connect开始执行发起连接三次握手开始connect返回成功三次握手结束。但是连接发送的syn,synackack用户都没有直接参与换句话说在发送这些数据包的时候用户并没有给传输层的TCP协议提交任何数据。这里的syn,synackack全部都是TCP协议报头的内容。
三、四次挥手
在客户端与服务器通信完毕过后谁先调用close开始进行四次挥手。一般来说主动断开方都是客户端。
以断供开方为客户端为例
第一次挥手当客户端执行到close这行代码的时候就意味着要断开和客户端的连接了此时开始进行四次挥手客户端给服务器端发送一个FIN报文假如它的序号值为n。
第二次挥手服务器端接收到了客户端的FIN报文马上给客户端发送一个确认信息即ACK报文确认号为n1确认已经收到客户端要断开的信息。
第三次挥手服务器端给客户端发送了确认信息之后也执行close表示服务器端也要断开了此时服务器端给客户端发送一个FIN报文假如它的序号值为m。
第四次挥手客户端接收到了服务器端的FIN报文马上给服务器端发送一个确认信息即ACK报文确认号为m1确认已经收到服务器端要断开的信息。
具体过程如下图所示 注意四次挥手断开连接时发送的FINACK用户都没有直接参与是底层协议自己完成的在代码层面只需要close。