Stream Socket && Data Socket

类型 形参 协议 流程 优劣
Stream Socket SOCK_STREAM TCP 客户端:create - connect - read/write
服务器:create - bind - listen - accept - read/write
能够分割、排序、重组,传输中断对其影响不大。
Data Socket SCOK_DGRAM UDP 客户端:create - sendto
服务器:create - recvfrom
不用连接,有需要就发送数据。

TCP协议下客户端和服务器连接的过程称为“三次握手”。
第一次握手:建立连接时,客户端发送SYN包到服务器,并进入SYN_SEND状态,等待服务器确认。
第二次握手:服务器收到SYN包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。


  • 未连接队列:三次握手中,服务器维护一个未连接队列,为每个客户端SYN包开设一个条目,表明服务器已收到SYN包,并向客户端发出确认,正在等待确认包。这些条目所标志的连接在服务器处于SYN_RECV状态,当服务器收到客户端的确认包时,删除该条目,服务器进入ESTABLISHED状态。
  • Backlog参数:表示未连接队列的最大容纳数目。
  • SYN-ACK 重传次数:服务器发送完SYN-ACK包,如果未收到客户端确认包,服务器进行首次重传,等待一段时间仍未收到客户端确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。ps:每次重传等待的时间不一定相同。
  • 半连接存活时间:指半连接队列的条目存活的最长时间,也就是服务器从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间的总和。也称半连接存活时间为Timeout时间、SYN_RECV存活时间。

TCP协议通信流程图:
TCP协议通信流程图客户端与服务器的三次握手:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/itsxwz/article/details/124933279