TCP三路握手:
TCP选项:
MSS选项:最大分节大小,也就是本连接的每个TCP分节愿意接收的最大数据量。发送端使用接收端的MSS值作为所发送分节的最大大小。
窗口规模选项:TCP连接任何一端能够通告对端的最大窗口大小是65535.具体使用参数为:SO_RCVBUF。
TCP连接终止:
TCP建立一个连接需要3个分节,终止一个连接需要4个分节。
1) 应用进程首先调用close,我们称为主动关闭。该端的TCP发送一个FIN分节,表示数据发送完毕。
2)接收到这个FIN的对端指向被动关闭。这个FIN由TCP确认,它的接收也作为一个文件结束符传递给接收端应用进程。因为FIN的接收意味着接收端应用进程再无数据可接收,如read返回值为0.
3)一段时间后,接收到这个文件结束符的应用进行将调用close关闭连接,这导致tcp也发送一个fin。
4)接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN.
TIME_WAIT状态:
TIME_WAIT状态存在的两个理由:
1、可靠地实现TCP全双工连接的终止。
2、允许老的重复分节在网络中消失。
解释1:防止ACK丢失,以便能够重传ACK。
解释2:tcp必须防止来自某个连接的老的重复分组在该连接终止后再出现,为做到这一点,tcp将不给出于time_wait状态的连接发起新的化身。一般为MSL的2倍,即1到4分钟。
缓冲区大小以及限制:
ipv4数据报的最大大小是 65 535字节,包括ipv4首部。
ipv6数据报的最大大小是 65 575字节,包括40字节的ipv6首部。
MTU:最大传输单元,最大值为65535. 以太网的MTU是1500字节。
ipv4要求的最新链路MTU是68字节。
MSS的值通常设置为MTU的值减去IP和TCP首部的固定长度,在以太网中使用IPV4的mss值为1460.TCP首部是20个字节,ipv4的首部是20字节,ipv6的首部是40字节。
TCP输出:
每一个TCP套接字都有一个发送缓冲取,我们可以使用SO_SNDBUF套接字选项来更改缓冲区的大小。当某个应用进程调用write时,内核从该应用进程的缓冲区中复制所有数据到所写套接字的发送缓冲区。当缓冲区已满时,将阻塞write调用,直到应用进程缓冲区的所有数据都复制到套接字的发送缓冲区。
阅读(2051) | 评论(0) | 转发(0) |