1.TCP的服务
虽然TCP和UDP最后都会通过IP层传输,但是二者却为用户提供完全不同的服务,TCP提供的是面向连接的,可靠的字节流服务
面向连接意味着俩个使用TCP的应用在彼此交换数据之前必须先建立一个TCP连接。可以用打电话比喻TCP的连接,要想俩个人通话,首先一方要拨通另一方的电话,等待另一方接通电话之后才可以通话,TCP连接只有俩方能通话,这和UDP完全不同
TCP通过如下方式来提供可靠的服务
.应用数据被分成TCP认为最合适的数据块
.当TCP发出一个段时,它启动一个定时器,等待目的端确认接收这个段,如果不能及时收到确认将重发这个报文段
.当TCP收到来自TCP另一端的数据时,它将发送一个确认
.TCP将保持它首部和数据的检验和,这是个端到端的检验和,目的是检验数据在传输过程中有没有变化
.如果有必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层
.TCP接收端必须丢掉重复的数据
.TCP双方每一端都有固定大小的接收缓冲空间,TCP根据此空间提供流量控制
2.TCP的首部结构
16位源端口号 | 16位目的端口号 |
---|---|
32位序号 | 32位确认序号 |
4位首部长度 | 保留6位 |
16位窗口大小 | 16位校验和 |
16位紧急指针 | 选项 |
数据 |
(1)目地端和源端的端口号,用于寻找发端和收端应用进程
(2)序号用来标识从TCP发端向收端发送的数据字节流,它表示在这个报文段中的第一个数据字节(其实说白了,它就是用来标识这个数据段的)
(3)确认序号包含发送确认的一端所期望收到的下一个序号,因此确认序号因该是上次已成功接收数据段序号加1只有ACK为1时,确认序号才有效
(4)首部长度给出首部中32bit字的数目
(5)6位标志他们中有多个可以被设为1,具体用法如下:
bit位 | 具体描述 |
---|---|
UGR | 紧急指针 |
ACK | 确认序号有效 |
PSH | 接收方应尽快将这个报文段交给应用层 |
RST | 重建连接 |
SYN | 同步序号用来发起一个连接 |
FIN | 发端完成任务 |
(6)16位窗口大小用于TCP流量控制
(7)最长见的可选字段是最长报文大小,又称MSS,通常在通信的第一个报文段指明这个
3.基本流程总结
TCP是一种提供可靠的面向连接的字节流运输层服务,TCP将用户数据打包构成报文段,它发送数据后,产生一个定时器,另一端对收到的数据确认,对失序的数据重新排序,丢弃重复数据,通过窗口大小提供端到端的流量控制,并计算和验证一个强制性的端到端的校验和