计算机网络基础-传输层

思维导图,摘自Blog
在这里插入图片描述

1.功能及作用

作用:网络层在通信两端建立连接的基础上实现端到端传输,也即是在终端的主机上确定的数据包属于哪个应用程序。
功能
●复用:在发送端,多个应用进程公用一个传输层;
●分用:在接收端,传输层会根据端口号将数据分派给不同的应用进程。
和网络层的区别:
●网络层为不同主机提供通信服务,而传输层为不同主机的不同应用提供通信服务。
●网络层只对报文头部进行差错检测,而传输层对整个报文进行差错检测。
端口实现复用和分用
服务器使用的端口号(复用)
客户端使用的端口号(分用)

2.UDP 和 TCP 的特点

用户数据报协议 UDP(User Datagram Protocol)
是无连接的,不可靠,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。
首部字段只有 8 个字节,包括源端口、目的端口、长度、检验和。12 字节的伪首部是为了计算检验和临时添加的。

传输控制协议 TCP(Transmission Control Protocol)
是面向连接的,可靠,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。
可靠性表现在:它向应用层提供的数据是 无差错的、有序的、无丢失的,简单的说就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的。
PS:网络层传输的数据单元为『数据报』,传输层的数据单元为『报文段』,但为了方便起见,可以统称为『分组』。
首部格式
序号 :用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。
确认号 :期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701。
数据偏移 :指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。
确认 ACK :当 ACK=1 时确认号字段有效,否则无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1。
同步 SYN :在连接建立时用来同步序号。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中 SYN=1,ACK=1。
终止 FIN :用来释放一个连接,当 FIN=1 时,表示此报文段的发送方的数据已发送完毕,并要求释放连接。
窗口 :窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。

3. TCP的三次握手

在这里插入图片描述
举个栗子:TCP 三次握手好比在一个夜高风黑的夜晚,你一个人在小区里l溜达,不远处看见小区里的一位漂亮妹子迎面而来,但是因为路灯有点暗等原因不能100%确认,所以要通过招手的方式来确定对方是否认识自己。
你首先向妹子招手(syn),妹子看到你向自己招手后,向你点了点头挤出了一个微笑(ack)。你看到妹子微笑后确认了妹子成功辨认出了自己(进入estalished状态)。
初始状态是妹子看着我(即 B 处于 LISTEN(监听)状态,等待客户的连接请求)
1.你招手(A 向 B 发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x)
2.妹子点头微笑并招手(向 A 发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y)
3.你点头微笑(向 B 发出确认,确认号为 y+1,序号为 x+1)
因此两人都确定了,彼此都相互认识,开始聊天(A和B连接建立,开始传送数据)
三次握手的原因
第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。

4. TCP的四次挥手

在这里插入图片描述
还是举个栗子:在这里插入图片描述
1、A 向 B 发出 FIN=1,表示自己没有数据要发送了,要断开连接。
2、B 收到 FIN =1,回复确认ACK=1,表示收到了 A 的 FIN 包,不会再接收 A 的数据了
3、B 再发 FIN=1(断开连接), ACK=1(不再接受A发的数据了,TCP处于半关闭,B还能向A发送数据)后,可能还有数据要发给 A,这个数据是不能停止发送的,有数据还是需要继续发送。
4、B 发完了数据,也发出 FIN =1,告诉 A 自己的数据发完了,不再发送数据了.
5、A 收到了 B 的 FIN=1(断开连接),知道 B 也没有数据要发送了,回复 ACK=1(确认收到消息)。此时,连接可以断开了。、
四次挥手的原因
客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。

5. TCP的可靠传输机制

TCP 使用超时重传来实现可靠传输:如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。

6. TCP滑动窗口控制

窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。
发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。
接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为 {31, 34, 35},其中 {31} 按序到达,而 {34, 35} 就不是,因此只对字节 31 进行确认。发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收。

7. TCP 拥塞控制

如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。
TCP 主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。
发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。

猜你喜欢

转载自blog.csdn.net/xiaomingds/article/details/106178240