计算机网络总结(5)---传输层

写在前面:这一系列文章是对计算机网络相关知识点整理的笔记,基本都是参考文章里的原话,做了整合,只是方便自己去看去复习,如果可以,希望朋友们点进参考的文章里仔细阅读,感谢大家!


  • 传输层提供不同主机上的进程之间的逻辑通信(端到端),即使在不可靠的网络层(主机之间的逻辑通信)传输下,传输层也能提供可靠的传输。 
  • 传输层的协议:TCP、UDP
  • 传输层的功能:提供了端到端的可靠的传输服务。
  • 几个重要的端口号:

一、TCP协议

图片来自网络

1. TCP消息头

固定部分20个字节,可选部分40个字节,最多60个字节。

typedef struct _TCP_HEADER
{
    short m_sSourPort;       // 源端口号16bit
    short m_sDestPort;        // 目的端口号16bit
    unsigned int m_uiSequNum;   // 序列号32bit
    unsigned int m_uiAcknowledgeNum; // 确认号32bit
    short m_sHeaderLenAndFlag;   // 前4位:TCP头长度;中6位:保留;后6位:标志位
    short m_sWindowSize;      // 窗口大小16bit
    short m_sCheckSum;       // 检验和16bit
    short m_surgentPointer;      // 紧急数据偏移量16bit
}attribute((packed))TCP_HEADER, *PTCP_HEADER;

这里写图片描述

1. 源端口号:16位,2个字节

2. 目标端口号:16位,2个字节

3. 序列号seq: 32位,4个字节。用来标识 从TCP发送端向TCP接收端发送的数据字节流。(后面三次握手四次挥手会用到)

4. 确认号ack:32位,4个字节。确认端期望接收到的,下一个序号(上次已成功收到数据字节序号加1)。只有ACK设置为1才有效(后面三次握手四次挥手会用到)

5.

(1)TCP头部长度字段:4位。一般称为数据偏移。指出头部占几个占32比特(4B)。(最大为15,所以TCP头最长为15*4B = 60B)或者说TCP报文段的数据部分,距离TCP报文段的起始处有多远。

(2)中间保留6位

(3)后6位标志位

  • URG:为1时,紧急指针有效
  • ACK(确认报文段):为1时,确认号有效
  • PSH:为1时,提醒接收方尽快将这个报文段交付应用层
  • RST(复位报文段):为1时,要求重新建立连接
  • SYN(同步报文段):为1时,请求建立一个连接
  • FIN(结束报文段):为1时,通知对方,本端要关闭连接

6. 窗口大小字段:16位,2个字节。用于流量控制。表示本机期望的一次接受的字节数。

7. 校验和:16位,2个字节。发送方填充,接收方执行CRC算法(循环冗余校验),检验TCP报文段在传输过程中是否损坏。

8. 紧急指针:16位,2个字节。是一个偏移量,和序列号中的值相加,得到紧急数据的最后一个字节的序号。只有URG设置为1时才有效。

9. 选项字段:32位,4字节。可能包括窗口扩大因子、时间戳等等。

2. 三次握手

总图

计算机网络总结(5)---传输层_第1张图片

 (1)第一次握手:

  • 客户端发送连接建立请求报文段标志位SYN置为1,随机生成一个序列号seq,假设为x。
  • 然后客户端进入SYN_SEND状态,等待服务器的确认。

(2)第二次握手:

  • 服务器收到客户端发送的报文段,确认号ack置为x+1标志位ACK置为1。同时随机生成一个序列号seq,假设是y,标志位SYN置为1。
  • 发送这个报文段后, 服务器进入SYN_RECV状态

(3)第三次握手:

  • 客户端收到服务器发送的报文段,标志位ACK置为1确认号ack为y+1
  • 发送报文段后,客户端和服务器都进入ESTABLISHED状态,完成三次握手,可以开始数据传输,

问:为什么是3次握手?

可以有效的防止已经失效的连接请求又传送到的服务器,产生错误。

比如:

客户端发送连接建立请求报文,但是由于网络拥塞,服务器没有收到。客户端没有收到ack,放弃建立连接或者重新发送。

一段时间之后,这个连接建立请求报文到达服务器,如果不采用三次握手而是两次的话,此时服务器发送ack报文,连接就建立了。但是客户端已经放弃建立连接,不会向服务器发送数据。服务器单向建立连接造成资源浪费。

3. 四次挥手

还是这张图

计算机网络总结(5)---传输层_第2张图片

(1)第一次挥手:

  • 假设上次主机1发送的报文段中seq是x+1,收到的报文段中seq是y。
  • 主机1设置序列号seq为x+2,确认号ack为y+1;设置标志位ACK为1,标志位FIN为1.
  • 主机1进入FIN_WAIT_1状态,表示主机1没有数据要发送给主机2.

(2)第二次挥手:

  • 主机2收到主机1发送的报文段,回复一个确认报文段,序列号seq为y+1,确认号ack为x+3;
  • 主机1进入FIN_WAIT_2状态

(3)第三次挥手:

  • 主机2向主机1发送报文段,FIN置为1,请求关闭连接。
  • 主机2进入CLOSE_WAIT状态。

(4)第四次挥手:

  • 主机1收到主机2发送的报文段,向主机2发送确认报文段,然后主机1进入TIME_WAIT状态。
  • 主机2收到后,关闭连接。
  • 主机1等待2个MSL(报文段最大生命周期),如果没有收到报文段,则双方关闭连接

问:为什么是4次挥手

TCP是全双工模式,因此要断开连接需要分别断开主机1到主机2的连接、主机2到主机1的连接。

当主机1发出FIN报文段时,只表示主机1已经没有数据要发送了,但是可以接受主机2发送的数据。

当主机2返回ACK报文段时,表示主机2已经知道主机1没有数据发送。

当主机2发送FIN报文段时,表示主机2也没有数据要发送了。

当主机1返回ACK报文段后,等待两个最大报文生存周期(防止还有数据要传)关闭连接。

4. 可靠传输

  • 通过序号确认重传保证可靠传输。
  • 重传又分为超时冗余ACK。冗余ACK是指 发送方收到对同一个报文段的3个冗余ACK,就可以认为这个报文段之后的报文段已经丢失。

5. 流量控制

  • 类似数据链路层的 滑动窗口协议。
  • 但是传输层的滑动窗口协议的窗口可以动态变化。

6. 拥塞控制(★)

拥塞控制的是一个全局性的过程,而流量控制室点对点通行量的控制。

 慢开始拥塞避免快重传(快恢复)

慢开始:

假设当前发送方拥塞窗口cwnd的值为1,而发送窗口swnd等于拥塞窗口cwnd,因此发送方当前只能发送一个数据报文段(拥塞窗口cwnd的值是几,就能发送几个数据报文段),接收方收到该数据报文段后,给发送方回复一个确认报文段,发送方收到该确认报文后,将拥塞窗口的值变为2。

发送方此时可以连续发送两个数据报文段,接收方收到该数据报文段后,给发送方一次发回2个确认报文段,发送方收到这两个确认报文后,将拥塞窗口的值加2变为4,发送方此时可连续发送4个报文段,接收方收到4个报文段后,给发送方依次回复4个确认报文,发送方收到确认报文后,将拥塞窗口加4,置为8,发送方此时可以连续发送8个数据报文段,接收方收到该8个数据报文段后,给发送方一次发回8个确认报文段,发送方收到这8个确认报文后,将拥塞窗口的值加8变为16,


当前的拥塞窗口cwnd的值已经等于慢开始门限值,之后改用拥塞避免算法。

拥塞避免算法:

每个传输轮次,拥塞窗口cwnd只能线性加一,而不是像慢开始算法时,每个传输轮次,拥塞窗口cwnd按指数增长。

在这里插入图片描述

快重传:

重传机制有两种,超时重传冗余ACK快重传是针对冗余ACK的方法。

 在这里插入图片描述

 在这里插入图片描述

在这里插入图片描述

二、UDP

1. UDP报头

 头部8B,UDP校检是通过增加12B的伪首部来实现的

 之后通过反码求和来进行差错校检

三、TCP和UDP的区别

  1. TCP是面向连接的,能保证数据的准确性和到达顺序;UDP是无连接的,可能出现丢包。
  2. TCP报头最少20B;UDP报头8B,但是有12B的伪首部用于校验。
  3. TCP可靠,因为它有三次握手四次挥手建立连接;报文头里的序号能使报文按序到达;有累计确认(因为是按序到达)和超时重传机制;有流量控制和拥塞控制机制。UDP不可靠。

参考:

传输层详解_大师兄啊的博客-CSDN博客_传输层

计算机网路-传输层详解_善水的博客-CSDN博客_计算机网络传输层

传输层 概述_星辰火之梦-CSDN博客_传输层

【计算机网络】传输层知识点总结_yaoyz105-CSDN博客_计算机网络传输层知识点

传输层概述以及传输层端口_fern_girl的博客-CSDN博客_传输层端口

TCP协议详解_柒年-CSDN博客_tcp协议

TCP协议的学习(二)TCP头部信息_唯一的信仰-CSDN博客_tcp头部信息

什么是TCP协议?_YUAN的博客-CSDN博客_tcp协议

408计算机网络第五章总结_Viator-CSDN博客_计算机网络第五章总结

TCP的拥塞控制(详解)_努力进阶的小菜鸟-CSDN博客_tcp拥塞控制

你可能感兴趣的:(#,计算机网络笔记,tcp/ip,服务器,网络)