对于TCP连接三次握手和四次挥手的理解

 

为了理解TCP的三次握手和四次挥手需要了解TCP协议

TCP协议的头如下:

源端口和目的端口各占16位也就是两个字节,这也就说明了为什么端口号在程序中是unsigned short类型的值。标志位flags有六个:URG:紧急指针(urgent pointer)有效。ACK:确认序号有效。PSH:接收方应该尽快将这个报文交给应用层。RST:重置连接。SYN:发起一个新连接。FIN:释放一个连接。按位设置每一个标志位代表一个状态,比如发起新的连接时SYN位

置1。

三次握手:

accept不参与三次握手,只是从监听套接字对应的已完成连接队列中取出一个连接。通过这个连接,accept返回的套接字可以与对端进行通信,因为这个连接中有源IP地址、目的IP地址、协议号、源端口、目的端口五个元素,也包含接收和发送缓冲区。send函数就是将数据拷贝到发送缓冲区,recv就是讲接收缓冲区数据拷贝出来。

 

四次挥手:

扫描二维码关注公众号,回复: 11793982 查看本文章

 

由于TCP连接时全双工连接,每一端必须单独进行关闭。网络是不可靠的,可能会存在最后发送的ACK报文丢失,主动关闭的一端会等待2MSL的时间,如果报文丢失进行重传。来确保对端从LAST-ACK状态到CLOSED状态。对于高并发的服务器程序过多的TIME-WAIT会占用大量资源,对于linux系统可以通过命令cat /proc/net/sockstat查看出去TIME-WAIT状态的连接。

 

 

猜你喜欢

转载自blog.csdn.net/qq_19825249/article/details/106618791