TCP/IP 协议


TCP工作在网络OSI七层模型中的第四层--传输层,IP在第三层--网络层。
应用层法下来,每一层都会添加头部信息进行封装,然后在发送到接收端。

TCP 协议格式

  • TCP 段
TCP首部 用户数据

TCP段大小也是有限制的,最大为1460字节

  • 以太网帧
以太网首部 IP首部 TCP首部 用户数据
22字节 最小20字节 最小20字节 最多1460字节

最终由网卡发送出去的数据包叫以太网帧,以太网帧的大小固定是1522字节,而IP首部和TCP首部的大小是不固定的,但最少会各占20字节,所以TCP段搭载的数据大小最多为1460字节。

TCP 三次握手

三次握手目的不是为了打通网络连接,而是在正式使用之前检测网络是否通畅。
TCP在三次握手时,会确认发送数据包的单位,也就是发送的最大消息长度(MSS:Maximum Segment Size),TCP在进行大力量数据传送时,就是以MSS的大小将数据进行分割发送。

  • 第一次握手
    首先客户端发起连接请求,向服务器发送TCP段,段中包含目标端口和本机端口,设置SYN标志位为1,序号为 x,也就是初始序号 ISN,如果是第一个连接,很有可能就是 0。当然,此时服务器对应的端口要处于监听状态。此时,客户端进入 SYNC_SENT 状态,等待服务器的确认。

  • 第二次握手
    服务端收到客户端发来的 SYN 段,对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1),这就是确认序号。同时,服务端还要发送 SYN 请求信息,将SYN位置为1,Sequence Number为 y(服务端的TCP段序号)。服务器端将上述所有信息放到一个TCP段(即SYN+ACK段)中,一并发送给客户端,此时服务器进入SYN_RECV状态。

  • 第三次握手
    客户端接收到服务端发来的 SYN+ACK 段后,发送一个 ACK 给服务端,将 Acknowledgment Number 设置为 y+1。此时客户端进入 ESTABLISHED(已连接)状态,服务端接收到此 TCP段,也将进入 ESTABLISHED 状态,也就标志着三次握手结束,连接成功建立。

三次握手完成之后,连接就建立了,之后就可以开始传输数据了。

TCP 四次挥手

当客户端和服务端双方发送数据完成之后,一般由客户端主动发起断开连接请求,当然,也有少数情况是服务器主动发起。

  • 第一次挥手
    客户端设置序号(Sequence Number)和确认序号(Acknowledgment Number),发送一个 FIN 段给服务器。这时,客户端进入 FIN_WAIT_1状态,意味着客户端没有数据要发送了。

  • 第二次挥手
    服务端收到 FIN 报文段,向客户端发送一个 ACK 段,客户端进入 FIN_WAIT_2 状态。表示服务端已同意连接关闭请求。

  • 第三次挥手
    服务端向客户端发送 FIN 段,请求关闭连接,同时服务端进入 LAST_ACK 状态。

  • 第四次挥手
    客户端收到服务端发来的 FIN 段,向服务端发送 ACK 段,之后客户端进入TIME_WAIT状态。服务端收到客户端的ACK 段以后,就关闭连接。

上面就是由客户端主动发起关闭连接的过程。

TCP 与 UDP 对比

  1. TCP是面向连接的,UDP是无连接的
  2. TCP是可靠的,UDP是不可靠的
  3. TCP是面向字节流的,UDP是面向数据包文的
  4. TCP只支持点对点通信,UDP支持一对一,一对多,多对多
  5. TCP报文首部20个字节,UDP首部8个字节
  6. TCP有拥塞控制机制,UDP没有
  7. TCP协议下双方都有发送、接收缓冲区,UDP没有实际意义上的发送缓冲区,但有接收缓冲区

要求输出内容可靠,不丢包,则选择使用TCP传输
对于某些数据量大、实时性要求较高的情况,选择UDP传输

posted @ 2023-10-08 17:46  D·Kingson.Mo  阅读(28)  评论(0编辑  收藏  举报