TCP提供一种面向连接的、可靠的基于流的服务。
面向连接:在彼此交换数据之前必须先建立一个TCP连接,双方互相确认,仅有两方彼此通信。
可靠:数据被分割成TCP认为最适合发送的数据块;TCP发出一个段后启动一个定时器,超时重传;TCP收到另一端的数据后,将回复一个确认;TCP将保持它首部和数据的校验和,以检测数据在传输过程中的任何变化;必要时TCP将对收到的数据进行重新排序;TCP还能提供流量控制。
基于流的服务:应用程序对数据的发送和接受是没有边界限制的,发送段指定的写操作和接受段执行的读操作的次数之间没有任何的数量关系。
提供全双工通信。数据在两个方向上独立的进行传输,连接的每一端必须保持每个方向上的输出数据序号。
TCP首部
通常是20个字节。
发送端和目的端的端口号:用于标识发端和收端的应用进程。一个IP地址和一个端口号称为一个socket,插口对(包含源端IP、源端口、目的IP、目的端口)可唯一确定一个TCP连接。
32位序号:用来标识从TCP发端向TCP收端发送的数据字节流,表示在这个报文段中第一个数据字节,TCP用序号对每个字节进行计数。用来解决网络包乱序问题。
32位确认序号:希望对端发送的数据字节,只有ACK标志位为1时,确认序号字段才有效。确认方ack=发送方seq+1。用来解决不丢包问题。
4位首部长度:TCP首部除固定长度外,还有可选项,因此TCP首部长度是可变的。UDP就没有,UDP的长度是固定的。
标志比特位:
URG:紧急指针有效
ACK:确认序号有效
PSH:接收方应该尽快将这个报文段交给应用层
RST:重置连接
SYN:同步序号用来发起一个连接
FIN:发端完成发送任务,释放连接
窗口大小:这个值是接受端正期望接收的字节,16位所以窗口大小最大为65535字节。著名的滑动窗口,解决流量控制。
校验和:这是一个强制性字段,一定是由发端计算和存储,并由收端进行验证。
紧急指针:只有当URG为1时才有效,是发送端向另一端发送紧急数据的一种方式。
问题一:为什么TCP首部中要把端口号放入最开始的4个字节?
答:在ICMP的差错报文中,要包含IP首部后面的8个字节的内容,而这里面有TCP首部中的源端口号和目的端口号。当TCP收到ICMP差错报文时需要用这两个端口来确定是哪条连接出了差错。
问题二:TCP提供了一种字节流服务,而收发双方都不保持记录的边界

最低0.47元/天 解锁文章
821

被折叠的 条评论
为什么被折叠?



