TCP协议(1)-简单介绍+三次握手+四次挥手

1. TCP协议

TCP协议.jpg

TCP协议的头部格式很重要,里面的很多参数都是必须要掌握的。

  • Source Port
    源端口
  • Destination Port
    目标端口
  • Sequence Number
    序列号,报文的第一个字节在数据流的序号,主要用来解决网络中乱序的可能。
  • Acknowledgment Number
    确认序号,是上一次收到的数据字节号加1,解决丢包问题
  • Offset
    用来确认可选字段的长度
  • TCP的各个标志位
    • URG:表示紧急指针域。用来保证TCP连接不被中断,并且监督中间层设备尽快处理这些数据。
    • ACK:取值为0和1,0表示应答无效,1表示应答有效。
    • PSH:表示Push操作。数据包在到达接收端后不要经过缓冲,直接到达应用程序。
    • RST:复位操作,用来复位那些产生错误的连接。
    • SYN:同步序号,建立连接。待会会讲怎么建立连接。
    • FIN:结束报文,表示发送端已经到达数据末尾。
  • Window:窗口大小,滑动窗口,用来进行流量控制。(之后博文分析)

2 三次握手的实现

tcp过程.jpg

三次握手的过程如下:首先客户端发送连接请求,将SYN标志位置为1,并将序号发送给服务端。服务端接收到后将确认号+1,同时将自己的序号发送给客户端。客户端收到服务器的SYN和ACK后,将ACK序号置为服务器的序号+1,完成三次握手。

四次挥手的过程如下:
第一次 结束方(客户端或者服务器)设置序号和ACK,发送FIN报文,,结束方此时进入FIN_WAIT_1状态。
第二次 在收到结束方的FIN报文的时候,回复一个ACK报文,结束方进入FIN_WAIT_2状态。
第三次 被结束方向结束方发送FIN报文段,请求关闭连接。
第四次 结束方收到FIN报文后回复ACK报文,结束方进入了TIME_WAIT阶段。结束方等待2MSL后关闭连接。

问题:

  1. 为什么采用三次握手而不是两次握手?
    保证传输的可靠性和高效的传输。如果是两次握手的话,客户端有可能不会确认自己收到了服务器的序号(客户端第一次请求很晚被服务器收到,而客户端认为这是一个失败的请求),导致资源浪费。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容