UDP为用户数据报协议,提供无连接服务,每个数据报都有一定长度。UDP不关心数据是否发送成功,这一切需要上层来保证。
TCP为传输控制协议,提供面向连接,给用户提供全双工的字节流。TCP关心确认、超时和重传等细节。tcp提供流量控制,告诉对方自己的通告窗口(advertised window)
TCP连接的三次握手
TCP在建立连接的时候需要三次交互:
首先,服务器端需要创建SOCKET,并执行bind,listen,监听端口
1。客户端调用connect函数,这将导致客户端发送一个SYN分节,在SYN中将标明客户端在后续的发送数据中使用的初始序列号k。
2。服务器端对该SYN进行确认,返回一个ACK,在ACK中含有服务器期待客户端后续数据的序列号,通常为K+1,另外服务器还发送一个同步分节SYN,里面标明服务器端即将发送数据的初始序列号J。
3。客户端对该SYN进行确认,同时含有J+1。
一般每个SYN中含有MSS选项,用来通知对方自己的所能接受的最大分节大小。
关闭TCP连接
1。某个应用程序调用close,称这一端为主动关闭(active close)。该端将向另一端发送一个FIN分节,表明数据发送完毕。
2。收到FIN的一端执行被动关闭(passive close)。TCP对该FIN进行确认,并将该FIN作为文件结束符传递给应用程序。
3。一段时间后,收到FIN的应用程序调用close。这将导致该另一端发送一个FIN。
4。主动关闭这一方对该FIN进行确认。
主动关闭一方在发送FIN后将进入TIME_WAIT状态。该状态将持续最长分节生命期MSL的两倍。
主要是为了:
1.实现终止TCP全双工连接的可靠性
2.允许老的重复分节在网络中消失
在IPv4中,一个ip数据报的最大大小是65535字节,包括ip头部。当一个IP数据报发出时,如
果他的大小超过相应链路的MTU,IPv4将会对数据报执行分片。IPv4主机会对其产生的数据报
执行分片,IPv4路由器对其转发的数据报也会执行分片。另外,IPv4头部有一个选项DF,用来
表示该数据报不允许分片。如果一个路由器收到一DF设置的数据报且该数据报大小超过MTU,
则会产生一个ICMPv4的出错消息。
每个TCP套接字有一个发送缓冲区,当调用write时,内核将从应用程序的缓冲区中拷贝所有
数据到套接口的发送缓冲区。当套接字的缓冲区不够大,应用程序将被挂起直到套接字的缓
冲区可以容纳应用程序的缓冲区。在TCP将缓冲区的数据发送出去后,他将在收到对方的确认
后才将发送数据删除。
TCP以MSS大小或更小的块发送数据到IP,其中MSS是由对方通告的。如果对方为通告则用536
。