TCP是什么?

由于应用层IP协议的不可靠传输,主要是无法保证数据报到达目的地以及包乱序的问题,在运输层实现了TCP协议,提供可靠的传输,对于TCP来说,在发送数据之前需要先建立连接,同时每个报文段的大小不能超过MSS,对于IP协议来说,MSS + IP头和TCP头的大小不能超过MTU(一般是1500字节)。

TCP和UDP的区别

TCP和UDP都是运输层的协议,提供进程到进程的一个逻辑连接,两者的主要区别体现在:

  • 连接:TCP是面向连接的,用一个四元组标记一个TCP连接,UDP则不用握手就可以传输,只需要一个二元组(目标IP,目标端口)标记一个UDP
  • 字节流:TCP是基于字节流的,有粘包问题(所以要记录数据长度),而UDP是基于报文的
  • 可靠:TCP是可靠传输(重传、网络控制、拥塞控制),而UDP的数据报可能丢失
  • 头部长度:TCP的头部长度一般是20字节,而UDP的头部长度只有8字节
  • 使用场景:TCP一般用于文件传输或者浏览器HTTP请求等,UDP主要用于视频通话或者DNS等

TCP的面向连接是什么

如果传输层协议选择了TCP,那么在首次发送报文段之前需要通过三次握手先建立TCP连接。

三次握手

第一次握手:客户端初始一个序列号client_isn,发送SYN报文给服务端

第二次握手:服务端响应客户端的SYN报文,同时初始一个序列号server_isn,发送SYNACK报文给客户端

客户端收到第二次握手已经成功建立连接,第三次握手可以携带数据

第三次握手:客户端响应服务端的SYN报文

socket编程

TODO

image-20240325095221964

如果某一方因为某些原因(关闭了浏览器、进程崩溃、宕机等因素)会主动关闭连接,此时就会发生四次挥手来完成关闭连接

四次挥手

第一次挥手:一般是客户端发起,发送FIN报文给服务端

第二次挥手:服务器端响应ACK给客户端,同时进入CLOSE_WAIT状态

如果服务器端有数据要发送,在此时发送,等到发送完成之后才继续进行第三次挥手

第三次挥手:服务器端发送FIN报文给客户端

客户端收到第三次握手,进入TIME_WAIT状态

第四次挥手:客户端响应ACK给服务器端

CLOSE_WAIT状态

TODO

TIME_WAIT状态

TODO

image-20240325100624153

TCP如何保证可靠传输

重传机制

网络控制

拥塞控制