跳转至

传输层

交换

电路交换

电路交换主要用于语音传输,性能更高

所有的电话两两相连是不现实的,而是先通过低速线路连接到电话交换局的电话交换机,然后电话交换局通过高速线路连接到长途局,这些线路和交换机设备组成了一个个子网,最后形成电信网,由电话公司负责管理,而电话本身并不属于子网。

20230514235241

早期使用接线员作为人肉交换机,后来改为了自动交换机,但原理都一样,拨号,然后交换机自动选择一条线路,这条线路被称之为虚电路(VC, Virtual Circuit),虚线路建立后,对方电话铃响,开是通话,只要通话不断,则相应线路会被一直占用

20230519225055

报文交换

需要存储全部的报文才会转发,比如以前的电报

20230515000832

存储转发(Store and forward)建模自邮政系统,也类似于物流系统,即信件/货物/信息被发送到中间站,查找转发表继续转发到下一站

分组交换

也称数据包交换,或封包交换,不需要建立通道,健壮性更好

报文被分割为一个个分组,每个分组都是一个数据包,由首部和数据两部分组成

路由器存储转发时,不需要等待完整的报文,接收方收到所有数据后再排序组装

服务

  • 面向无连接的服务(conncetionless service)则是按照邮政系统建模的
  • 面向连接的服务(connection-oriented service)就是按照电话系统建模的

20230513144032

Socket 套接字是为了开发者更方便的使用底层协议(通常是TCP或UDP)而存在的一个抽象层

20230513144432

传输协议

传输层主要有两种协议:UDP、TCP

UDP跟IP一样,传输形式都是包,它只管转发数据,不需要建立连接,并不关心数据是否被送达,所以也不会关心数据被送达的顺序等等。可以一对多。

而TCP比较复杂,是以字节流(没头没尾)的形式分段且有序传输的,需要建立连接,遇到阻塞数据丢失等会重传。只能一对一。

所谓的建立连接,只是逻辑上的概念,本质是指客户端和服务端各自维护一定的数据结构(一种状态机),来记录和维护这个“连接”的状态。

如果说前三层协议建立了一座桥,则四层的TCP只是在桥的两端增加了记录审查人员,它只能努力保障自己这一层传输的可靠性,至于下层的桥是否牢固可靠,跟TCP无关。

UDP可以用在环境简单、需要多播,以及应用层自己控制传输的场景:

  • DHCP广播获取IP
  • VXLAN
  • QUIC(Quick UDP Internet Connections,快速 UDP 互联网连接)(由Google 提出)
  • 实时游戏
  • 很多直播应用,都基于 UDP 实现了自己的视频传输协议,因为基于TCP的直播协议RTMP在延迟较高时卡顿比较严重
  • IoT物联网通信协议 Thread(由Google 旗下的 Nest 建立 Thread Group推出)

20220103112203

端口号大小:2Bytes*8bit=16bit,所以取值范围为:1~65535(2^16,0和65536不使用),使用IP+端口号则可以一对一连接。

UDP头部只有源端口和目的端口,而TCP相对比较复杂

  • 源/目标端口号,应用程序会监听端口号,通过端口号来区分收/发程序
  • 序号,用于重发与控制顺序,保证可靠通信
  • 确认序号,为了确认是否丢包
  • 窗口大小,流量控制和阻塞控制
  • 校验和,用于校验信息是否在传输中出现损失
  • 状态标识位,连接维护

20210808234116

TCP三次握手

A:您好,我是 A。
B:您好 A,我是 B。
A:您好 B。

20210808234230

握手的目的:

  1. 建立连接,保证双方可以互相发送和接收数据(全双工)
  2. 互相确认对方数据片段的起始序号,为后续数据传输做准备

完全满足以上两点至少需要三次握手,同时恰好解决了重复链接的问题

为了防止冲突,起始序号并不能从1开始,起始序号要随着时间变化,每4微秒+1,每个连接都要有不同的序号。

TCP四次挥手

A:我完事了。
B:我知道了,我还没完事。
B:我也完事了。
A:我知道了。

20210808234244

经过“四次挥手”确保双方都知道且同意对方断开连接,然后移除为对方维护的数据结构和信息,对方之后发送的包也不会接收,直到再次连接。