计算机网络——Tcp三次握手&四次挥手

计算机网络——Tcp三次握手&四次挥手

本文主要参考:小书go的博客以及计算机网络

OSI、TCP/IP及五层协议体系结构

OSI体系结构(自上而下各层为):应用层、表示层、会话层、运输层、网络层、数据链路层、物理层;
TCP/IP体系结构:应用层、运输层、网际层IP、网络接口层;
五层协议体系结构:应用层、运输层、网络层、数据链路层、物理层;

TCP

传输控制协议TCP(Transmisson Control Protocol):提供面向连接的,可靠的数据传输服务,属于传输层协议。

TCP报文首部
  1. 源端口和目的端口,各占2个字节,分别写入源端口和目的端口;
  2. 序号,占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号。例如,一段报文的序号字段值是 301 ,而携带的数据共有100字段,显然下一个报文段(如果还有的话)的数据序号应该从401开始;
  3. 确认号(类似于ACK?不是=v=,后面有ACK),4个字节,是期望收到对方下一个报文的第一个数据字节的序号。例如:B发送一段序号为300数据长度为200的数据给A,A接收完之后期望收到B发来后面序号为500开始的数据,所以A发送给B的报文中确认号为500;
  4. 数据偏移,4位,指出TCP报文的数据距离TCP报文段的起始处的偏移量;
  5. 保留位,6位;
  6. 紧急URG,1位。当URG=1时,紧急指针才有校,表明报文中有紧急数据;
  7. 确认ACK,仅当ACK=1时,确认字段才有效,TCP规定,在建立连接后所有报文的传输都必须把ACK设置为1;
  8. 推送PSH,当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应,这时就将PSH设置为1;
  9. 复位RST,RST=1时,表明TCP连接中出现严重差错,必须释放连接,重新进行连接;
  10. 同步SYN,在建立连接时用来同步序号。当SYN=1,ACK=0,表明是连接请求报文,若同意链接,则响应报文中应设置SYN=1,ACK=1;
  11. 终止FIN,用来释放连接。当FIN=1,表明此报文的发送方的数据已经发送完毕,并且要求释放;
  12. 窗口,2字节。通知接收方,发送本报文需要多大的空间来接收;
  13. 检验和,2字节。检验首部和数据两部分;
  14. 紧急指针 ,2字节。指出本报文段中的紧急数据的字节数;
  15. 选项,长度可变,定义一些其他的可选参数。
TCP连接的建立(三次握手)

在这里插入图片描述

最开始的时候客户端和服务器都是处于CLOSED状态。主动打开连接的时客户端,被动打开连接的服务器。
在这里插入图片描述