参考来源: 原创
多路复用 与 多路分解
- 多路分解(demultiplexing): 将传输层报文段中的数据交付到正确的套接字。
- 多路复用(multiplexing): 源主机从不同套接字中收集数据块,并为每个数据块封装上首部数据(为了方便分解。
图示:
即:
【原始socket数据】—-多路复用—-【传输层报文段】
【传输层报文段】—-多路分解——【原始socket数据】
TCP 和 UDP的区别
区别 | TCP | UDP |
---|---|---|
数据单位 | 报文段 | 报文段 |
是否连接 | 是 | 否 |
是否可靠 | 是 | 否 |
是否拥塞 | 是 | 否 |
包头 | 20字节 | 8字节 |
广播或多播 | 无 | 有 |
校验和
步骤:
- 原报文段加上IP数据报的伪首部,分成十六位十六位一个单位
- 初始将校验和字段全部归零
- 所有十六位的字段相加,溢出位加到末位
- 将最后结果按位取反
TCP报文段结构
其中最重要的概念是【序号】(seq)和【确认号】(ack)
序号(seq):表示发送过去的报文段要被接收方接受的序号
确认号(ack):表示发送发希望从接收方得到的报文段的序号
序号和确认号实例
分为三个步骤:
- 初始,用户->主机,序号为42,确认号79,表示主机从42开始接收数据,用户希望获得79
- 主机收到了序号42的数据,数据长度1,所以下一次希望收到43的数据,然后发给用户一个数据c,序号就应该是79,因为用户希望获得79的数据
- 用户收到了序号79的数据,数据长度1,所以下一次希望收到80的数据,于是确认号为80,发到主机43的位置,所以序号为43,确认号80
TCP的连接管理
连接建立:
连接中止:
都有着序列号+1和确认号+1的过程。