TCP三次握手

来源:互联网 发布:sql explain 怎么看 编辑:程序博客网 时间:2024/05/22 13:25

在server和client调用socket生成套接字后,server调用listen监听某个端口后,调用accept来等待client的连接,accept本身是阻塞的,直到收到client的请求后,accept才返回

client调用connect函数项server所在主机发起连接请求,连接的报文中除了包含server的iP和端口外,还包含了client端初始化的序号SYN a 和MSS=1460(最大数据段的大小),一个数据包的大小事数据段大小加上IP包头,数据链路包头的大小,用户进程的数据是数据段大小,称之为MTU,数据段长度应该取TCP连接上各个局域网段支持最大数据帧长度中的最小者,否则IP数据包在通过局域网时候,有可能会被截断。

正在倾听client连接的server收到client的连接请求后,server从accept中返回,server会向client端发送server端初始化的序号SYN b和对client端的SYN a的确认ACK=a+1,还有本段的最大数据段长度MSS=1460,

当client断收到server的回应后,将发出对server请求的回应ACK=b+1,然后从connect中返回,返回值是一个打开的socket描述符,同时server接收到SYN确认信息后,也将从accept中返回,同样返回一个socket描述符,用于和client进行数据通信

如果数据包在握手过程中丢失,将导致发送方的定时器超时重发,然后要么重新发送数据包被收到,要么因为多次发送超过限定而放弃

从connect何accept中返回的socket描述符是连接套接字,不同于socket()中返回的socket被动套接字描述符被动套接字只能用于接受客户进程的连接请求,而数据通信是由连接套接字完成的。