服务
TCP和UDP同样使用IP提供的服务,但是TCP提供的是面向连接,可靠的字节流服务
-
面向连接
使用TCP进行通信双方,必须先建立连接,然后进行数据交换
-
可靠服务
- 将应用数据分割成固定大小的
报文段
- 每次发出报文,会启动定时器,在规定时间内,没有确认,则会进行重发
- 收端会舍弃重复TCP报文段
- 发端收到TCP报文段后,会进行回应,及ACK回应
- TCP首部存在校验和,防止数据传输过程中,数据发生了篡改,收端会舍弃校验失败的TCP报文段
- 发端会对诸多TCP报文段,进行编排,给定序号,方便收端进行数据合并
- TCP可以做到流量控制,滑动窗口,TCP通知双方自己的发送和接受能力,即窗口大小
- 将应用数据分割成固定大小的
-
字节流
TCP不会修改任何数据内容
首部
-
端口号:识别收端发端的应用进程,结合IP首部的IP地址,可以建立唯一的连接
-
序号:TCP将应用数据分割大小固定的无数报文段,序号指每个报文段的第一个字节,在整个应用数据的偏移量;
在TCP建立连接期间,序号被系统赋予初始值,即ISN(init sequence number),三次握手之间,不会增加,只有在传送数据之后,序号为上一个报文段序号+上一个报文段本身长度,当数值来到2^32-1时,会归0,进行重新累加
-
确认序号
- 表示收端想要接收的下一个TCP报文段的序号;
- 所有TCP报文段中,除了SYN报文段,其余报文段都有确认序号;
- 确认序号是收端用来给发端进行传送确认的,发端,一段时间内,发送了多个TCP报文段,如果对每一个TCP报文段进行确认回应,那么,回应的ACK,
- 公式一:序列号 = 上一次发送的序列号 + len(数据长度)。特殊情况,如果上一次发送的报文是 SYN 报文或者 FIN 报文,则改为 上一次发送的序列号 + 1。
- 公式二:确认号 = 上一次收到的报文中的序列号 + len(数据长度)。特殊情况,如果收到的是 SYN 报文或者 FIN 报文,则改为上一次收到的报文中的序列号 + 1。
-
首部长度:本TCP报文段,首部中32bit数目
-
标志比特:
- URG:紧急指针
- ACK:确认序号有效
- PSH:收端应该尽快将本报文段交给应用层
- RST:重建连接
- SYN:同步序号用来发起一个连接,后面会详细讲解
- FIN:发端完成发送