2019独角兽企业重金招聘Python工程师标准>>>
介绍
TCP和UDP使用同一网络层(IP),但TCP提供了面向连接、可靠的传输层服务
TCP传输给IP层的信息单位称为报文段或段
TCP通过如下方式保证可靠性:
- 应用数据被分割成TCP认为最合适发送的数据块
- TCP发送一个段后,会启动一个定时器等待目的端确认收到该段,否则重发
- 当TCP接收端收到数据,会发送一个确认
- TCP保持首部和数据校验和,接收端发现校验和有差错就丢弃报文段
- TCP将对收到的数据重排序,保证顺序交给应用层
- TCP接收端必须丢弃重复数据
- TCP提供了流量控制,避免“快”主机压垮“慢”主机
TCP提供字节流传输服务,它交换的数据都是由字节(8位)构成
TCP不解释字节流内容,也就说它不知道传输的是二进制还是字符,这个内容由应用层解释
TCP首部
由图可知,TCP首部最少5*4=20
字节
- 端口:通过TCP首部的源、目的端口,和IP首部的源、目的IP,可以唯一确定一个连接
- 序号:下一字节数据的序号。每发送一字节数据,序号+1,到达
2^31-1
后置0 - 确认序号:确认端期望接收下一字节的序号,值为上次成功接收数据序号+1
- 首部长度:代表首部占了多少个32位,4位代表最多
2^4=16
个32位word,也就是64字节 - 标志位:6个标志位
- URG:紧急指针有效
- ACK:确认序号有效
- PSH:接收方应该尽快将这个报文段交给应用层
- RST:重建连接
- SYN:同步序号用来发起一个连接
- FIN:发送端完成发送任务
- 窗口大小:接收端期望接收的字节数,TCP基于该窗口大小进行流量控制
- 校验和:覆盖TCP首部和TCP数据,发送端计算和存储,接收端验证
- 紧急指针:代表一个正偏移,表示紧急数据的序号到哪结束。当URG=1该值才有意义,该偏移加上序号字段的值等于紧急数据最后一字节的序号
- 选项:最常见选项为MSS,代表最长报文段大小