TCP协议

TCP包头格式

TCP协议

  • 源端口号和目的端口号不可少。
  • 包的序号,为了解决乱序的问题
  • 确认序号,发出去的包的确认序号,解决不丢包的问题。
  • TCP只能保证不丢包,IP层你丢不丢包,管不着。
  • 状态位。SYN发起一个连接,ACK回复,RST是重新连接,FIN是结束连接等。
  • TCP还会做流量控制和拥塞控制
    TCP协议重点关注的问题:
  • 顺序问题,稳重不乱
  • 丢包问题,承诺靠谱
  • 连接维护,有始有终
  • 流量控制,把握分寸
  • 拥塞控制,知进知退

TCP三次握手

  • A发起一个连接,会有几种可能,A的包丢了,绕了弯路超时了,B不愿意连接
  • A不能确认结果,于是再发,终于有一个请求到达了B,但是请求到达B这个事情,目前A是不知道的,A还有可能再发
  • B收到了请求包,知道了A的存在,如果B不愿意连接,A重试一段时间之后就会失败,如果B是愿意建立连接的,则会发送应答包给A
  • 对于B来说,这个应答包不知道能不能到达A。B的应答会发多次,但是只要一次到达了A,A就认为有连接了,对于A来说,它的消息有去有回,所以A会给B发送应答包,保证B的消息也是有去有回
    三次握手除了双方建立连接外,主要为了沟通一件事情,就是TCP包的序号的问题。
    TCP协议
    一开始,客户端和服务端都处于CLOSED状态。首先是服务端主动监听某个端口,处于LISTEN状态。然后客户端主动发起连接SYN,之后处于SYN-SENT状态,服务端收到发起的连接,返回SYN,并且ACK客户端的SYN,之后处于SYN-RCVD状态。客户端收到服务端发送的SYN和ACK之后,发送ACK的ACK,之后处于ESTABLISHED状态,因为它一发一收了。

TCP四次握手

TCP协议

TCP状态机

TCP协议