TCP的三次握手和四次挥手和UDP协议

目录

TCP

三次握手

四次挥手

为什么建立连接是三次而断开连接是四次呢?

TCP和UDP的区别

TCP数据包的封装

UDP数据包封装


TCP

TCP(Transmission Control Protocol) 传输控制协议,是面向连接的协议,属于OSI七层模型中的传输层协议
我们所熟知的FTP、SSH、Telnet、HTTP、HTTPS、SMTP、POP3等都是使用TCP协议

TCP最重要的一个特点就是面向连接的协议,一次TCP的会话连接需要三次握手,会话断开需要四次挥手

在分析三次握手和四次挥手前先看一下数据包交互过程中各信号代表着什么

  (1)序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 
  (2)确认序号:Ack序号,占32位,当Ack=seq+1时,确认序号有效。 
  (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下: 
  (A)URG:紧急指针(urgent pointer)有效。 
  (B)ACK:确认序号有效。 
  (C)PUSH:接收方应该尽快将这个报文交给应用层。 
  (D)RST:重置连接。 
  (E)SYN:发起一个新连接。 
  (F)FIN:释放一个连接。 
需要注意的是: 
  (A)不要将确认序号Ack与标志位中的ACK搞混了。 
  (B)确认方Ack=发起方seq+1,两端配对。

三次握手

  (1)第一次握手:Client将标志位SYN置为1,随机产生一个值Seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。 
  (2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,Ack=x+1,随机产生一个值Seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。 
  (3)第三次握手:Client收到确认后,检Ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,Seq=x+1,Ack=y+1,并将该数据包发送给Server,Server检查Ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了


 

四次挥手

  (1)第一次挥手:Client发送一个FIN,Seq=u,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。 
  (2)第二次挥手:Server收到FIN后,发送一个ACK=1给Client,确认序号Ack=u+1,Server进入CLOSE_WAIT状态。 
  (3)第三次挥手:Server发送一个FIN,Seq=w,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。 
  (4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK=1给Server,Ack=w+1,Seq=u+1,Server进入CLOSED状态,完成四次挥手。


为什么建立连接是三次而断开连接是四次呢?


这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你未必可以马上关闭SOCKET,也许你还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的

TCP和UDP的区别

  1.   基于连接与无连接
  2.   TCP要求系统资源较多,UDP较少; 
  3.   UDP程序结构较简单 
  4.   流模式(TCP)与数据报模式(UDP); 
  5.   TCP保证数据正确性,UDP可能丢包 
  6.   TCP保证数据顺序,UDP不保证 

 TCP数据包的封装

TCP段首部的定长部分为20个字节,即5个单位的长度

 UDP数据包封装

猜你喜欢

转载自blog.csdn.net/qq_36119192/article/details/83500569