image.png主机才会有的层次。

功能

  • 提供进程和进程之间(端到端)的逻辑通信。【网络层提供主机之间的逻辑通信】
  • 复用和分用

复用针对发送方不同进程使用同一个传输层协议;
分用指接收方传输层剥去报文首部后,能把数据正确交付到目的进程,使用目的端口号识别。

  • 差错检测(首部&数据部分)【网络层只检查IP数据报首部】

    传输层寻址与端口

    端口:传输层的SAP(service access point),标识主机中的应用进程。
    数据链路层的SAP是MAC地址,网络层的SAP是IP地址
    端口号:应用进程通过端口号进行标识,只有本地意义。长度16bit,能标识65536个不同的端口号。
    image.png
    49152 = 1100/0000/0000/0000

    image.png
    套接字(Socket):(主机IP,端口号),唯一标识网络中的一个主机和它上面的一个进程,而后建立的连接会被阻止

UDP

UDP = IP + 复用分用 + 差错检测
UDP首部(8B)
image.png
分用时,找不到目的端口号,丢弃报文,并给发送方发送ICMP不可达报文

特点

  • 无连接
  • 不可靠交付
  • 面向报文,适合一次性传输少量数据。【应用层给UDP多长报文,UDP直接封装】
  • 无拥塞控制
  • 首部开销小,8B

    应用

    DNS、SNMP,多媒体应用(IP电话,实时视频会议,流媒体),远程调用

    UDP校验

    image.png
    [17为协议字段,UDP长度 = 首部8B + 数据部分长度]
    image.png
    【只有在进行首部检验时,才填上伪首部】
    数据部分用0填充成4B的整数倍

TCP

特点

  • 面向连接
  • 点对点 —> 不能用于广播,多播
  • 可靠有序,不丢不重
  • 全双工通信
  • 面向字节流,采用对报文段的确认机制
  • TCP中端口号80标识Web服务器端的HTTP进程

    应用

    FTP,HTTP,TELNET(远程登录)

    首部格式(20B)

    image.png

确认号:接收方期望下一个收到的字节序号。
数据偏移(首部长度):TCP报文段的数据部分距离TCP报文段起始处有多远,以4B为单位。
控制位

  • URG(紧急位):URG =1时,发送方优先传输
  • ACK(确认位):ACK =1时,确认号有效。连接建立后,ACK必须为1
  • PSH(推送位):PSH = 1时,接收方优先处理
  • RST(复位):RST = 1时,TCP出现严重差错,需释放连接
  • SYN(同步位):SYN =1时,表明是一个连接请求/接受报文
  • FIN(终止位):FIN = 1时,表明报文段发送方数据已发完,释放连接

窗口:接收方能够允许接收的数据量。发送窗口 = Min{接收窗口,拥塞窗口}
紧急指针:URG=1时才有意义,指出本报文段中紧急数据的字节数

连接管理

采用Client/Server方式

建立连接

三次握手【考查不同时期报文段中重要的首部字段】

  • ROUND1
    • C:连接请求报文段 SYN=1, seq = x(随机)
  • ROUND2
    • S端为TCP连接分配缓存和变量
    • S:返回确认报文段 SYN=1, ACK=1, seq = y(随机),ack = x+1【期待对方发送的下一个字节】
  • ROUND3
    • C端为TCP连接分配缓存和变量
    • C:SYN = 0, ACK = 1, seq = x+1, ack = y+1
    • 第三次握手时,若携带数据,则seq+1,若不携带数据,则不消耗seq

SYN洪泛攻击
攻击者向server大量发送第一次的数据包,但不进行确认。Server再收不到确认后,重复发送ACK给攻击者,浪费资源。

释放连接

四次握手【考查不同时期报文段中重要的首部字段】
任何一方都能够主动终止连接
FIN用来释放一个连接,标识本方已没有数据要传输,但可以接收对方的数据

  • ROUND1(C)
    • FIN = 1, seq = u
  • ROUND2(S)
    • ACK = 1, seq = v, ack = u+1
  • ROUND3(S)
    • FIN = 1, ACK =1, seq = w, ack = u+1
  • ROUND4(C)
    • 客户端回送一个确认报文段,再等待2MSL(最长报文段寿命),连接彻底关闭
    • ACK = 1, seq = u+1, ack = w+1

image.png

可靠传输

可靠:接收方进程从缓存读出的字节流与发送方发出的字节流完全一样。

  1. 序号

    序号字段:报文段第一个字节的序号

  2. 确认

    TCP默认使用累计确认

  3. 重传

在规定的时间内没有收到确认,重传已发送报文段。
重传时间:RTTs(加权平均往返时间)【每个RTT的平均值】

冗余ACK
每当收到比期望序号大的失序报文时,发送一个冗余ACK,指明下一个期待字节的序号
发送方收到三次冗余ACK时,进行重传【快速重传】

流量控制

使用滑动窗口机制。
发送窗口 = Min{接收窗口Rwnd, 拥塞窗口}
发送窗口大小要理解为在未收到确认前,还能够发送的最大字节数。
TCP为每一个连接设立一个持续计时器,当一方收到零窗口通知时,启动持续计时器;
持续计时器时间到期,就发送一个零窗口探测报文段,接收方收到后,会返回当前接收窗口值。

拥塞控制

【全局性。流量控制:点到点】
假设数据单方向传送,而另一个方向只发送确认。
假设接收方有足够大的缓存。

慢开始&&拥塞避免

【理解过程】
ssthresh为门限值,在拥塞后乘法减小
image.png

快重传&&快恢复

区别:当出现网络拥塞时,不是降为1,而是降到新的门限值】
收到3次冗余ACK后,应执行快恢复算法
image.png

【易混淆点1】
区别两个时间概念:
[此处假定拥塞窗口为50]

  • 4个RTT内报文段传输均成功,则报文段都得到确认后:

1 2 4 8为前四次,第四次的8个报文被确认后,窗口大小应变为16

  • 第4次报文传输时:

1 2 4 8,8即为第四次传输时的窗口大小

【易混淆点2】
当发生了超时之后,若没有采用快开始,则下一个RTT内窗口大小为1,下一个RTT后窗口大小为2