一、思维导图
二、传输层的功能
运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。
由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。
主要功能总结如下:
- 传输层提供进程和进程之间的逻辑通信(网络层提供主机间的通信)
- 复用和分用
- 传输层对接收到的报文进行差错检测
- TCP/UDP协议
三、UDP 和 TCP 的特点
用户数据报协议 UDP(User Datagram Protocol)
UDP 在传送数据之前不需要先建立连接,远程主机在收到 UDP 报文后,不需要给出任何确认。虽然
UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比
如: QQ 语音、 QQ 视频 、直播等等
传输控制协议 TCP(Transmission Control Protocol)
TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。
TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、流量控制、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。TCP 一般用于文件传输、发送和接收邮件、远程登录等场景。
🚩 插入一个小知识点:TCP/UDP 应用中,端口号的作用是什么?
IP 地址 + TCP/UDP 端口号确定因特网中的某个主机上的某个应用进程
四、UDP协议
UDP 只在 IP 数据报服务之上增加了很少功能,即复用分用和差错检测功能。
1. UDP首部格式
2. UDP校验
五、TCP首部格式
六、TCP可靠传输
可靠传输:保证接收方收到的字节流和发送方发出的字节流是完全一样的
- 传输层:使用 TCP 实现可靠传输
- 网络层:尽最大努力交付,不可靠传输
TCP实现可靠传输的机制:
校验:与UDP校验一样,增加伪首部
序号:一个字节占一个序号。序号字段指的是一个报文段第一个字节的序号
确认:累计确认
超时重传:确认重传不分家,TCP发送方在规定的时间内没有收到确认就要重传已发送的报文段。
七、TCP三次握手 - 建立连接
1. 三次握手过程(连接建立)
SYN
:连接请求/接收 报文段seq
:发送的第一个字节的序号ACK
:确认报文段ack
:希望收到的下一个数据的第一个字节的序号
具体流程:
- 客户端:发送连接请求报文段 SYN, 无应用层数据。
- 服务器端:为该TCP连接分配缓存和变量,并向客户端返回确认报文段ACK,允许连接,无应用层数据。
- 客户端:为该TCP连接分配缓存和变量,并向服务器返回确认的确认,可以携带数据。
2. 为什么要三次握手
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
- 第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常
- 第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
- 第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常
所以三次握手就能确认双发收发功能都正常,缺一不可。
3. 为什么要传回 SYN
接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。
SYN 是 TCP/IP 建立连接时使用的握手信号。在客户机和服务器之间建立正常的 TCP 网络连接时,客户机首先发出一个 SYN 消息,服务器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以 ACK响应,表示确认发来的数据已经接受无误。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。
4. 传了 SYN,为啥还要传 ACK
双方通信无误必须是两者互相发送信息都无误。传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。
5. SYN洪泛攻击
攻击者发送大量的TCP SYN,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态(半连接状态),服务器收不到再确认的话,还会重复ACK给攻击者,这样更加浪费服务器的资源。
八、TCP四次握手 - 释放连接
1. 四次握手过程(连接释放)
FIN
:连接终止位
具体过程:
- 客户端:发送连接释放报文段FIN,停止发送数据,主动关闭TCP连接。
- 服务器端:回送一个确认报文段ACK。客户到服务器这个方向的连接就被释放了——半关闭状态
- 服务器端:发送连接释放报文段FIN,停止发送数据,主动关闭TCP连接。
- 客户端:回送一个确认报文段ACK,再等到时间等待计时器设置的2MSL后(最长报文段寿命),服务器到客户这个方向的连接就被释放了——连接彻底关闭
2. 为什么要四次挥手
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。
九、TCP流量控制 — 滑动窗口协议
流量控制是为了控制发送方发送速率,保证接收方来得及接收。
TCP实现流量控制主要是 滑动窗口协议, 使用这种方法的时候,发送方和接收方向外通信各使用一个窗口。窗口大小取决于下面两个数:接收窗口(rwnd)和拥塞窗口(cwnd)。
接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段 rwnd 设置为 0,则发送方不能发送数据。
(接收方根据自己接收缓存的大小,即接收窗口rwnd
,动态的调整发送方的发送窗口大小,发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值。)
滑动窗口协议的实际应用:数据链路层的三个ARQ协议
十、TCP拥塞控制
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分(需>供),网络的性能就要变坏。这种情况就叫拥塞。
如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。
因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。
流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度,防止过多的数据注入到网络中。
TCP的拥塞控制采用了四种算法,即 慢开始
、 拥塞避免
| 快重传
、快恢复
。
- 慢开始(指数增长): 慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。
- 拥塞避免(加法增大,乘法减小): 拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT cwnd加1。(网络堵塞后cwnd=1,慢开始轮限ssthresh = 堵塞时的cwnd/2)
快重传与快恢复: 在 TCP / IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。
没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。
有了 FRR,如果接收方接收到一个不按顺序的数据段,它会立即给发送方发送一个重复确认。如果发送方接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。 当有单独的数据报丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据报在某一段很短的时间内丢失时,它则不能很有效地工作。
(网络堵塞后cwnd = cwnd/2,慢开始轮限 ssthresh = 堵塞时的 cwnd/2)
十一、网关 Gateway
网关(Gateway)设备又称网间连接器、协议转换器,是多个网络间提供数据转换服务的计算机系统或设备。可以说网关设备就是不同网之间的连接器,就是数据要从一个网到另外一个网时要经过“协商”的设备。
网关工作在 OSI/RM 的传输层及以上的所有层次,通过重新封装信息来使它们能够被另一种系统处理。
事实上现在的网关已经不能完全归为一种网络硬件,而可以概括为能够连接不同网络的软件和硬件的结合产品。
一个非常典型的例子就是互联网邮件与手机邮件的转换服务。
手机邮件与互联网邮件有时候可能会不兼容,这是由于他们在表示层和应用层中的 “ 电子邮件协议 ” 互不相同导致的。
那么,为什么连到互联网的电脑与手机之间能够互发电子邮件呢?
因为互联网与手机之间设置了一道网关。网关负责读取完各种不同协议后,对他们逐一进行合理的转换,再将相应的数据转发出去。这样一来即使应用的是不同电子邮件协议,计算机与手机之间也能互相发送邮件。