运输层概述
在TCP/IP体系中运输层有着最重要的两种协议:TCP和UDP。对比IP层来说,通信的两端是两台主机,而运输层的通信的真正端点是主机中的进程!
一张图了解运输层(中英)
Q1
必须理解的概念
01
一台主机中经常有多个进程同时分别和另一台主机中的多个应用进程通信,所以运输层提供了两个很重要的功能!
复用(multiplexing):发送方不同的应用进程都可以使用同一个运输层协议传送数据(需要加上头部Header)
分用(demultiplexing):接收方的运输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。
注:复用和分用是基于端口port
02
单个计算机进程是用进程标识符来区分的,但在因特网环境下,不同操作系统的种类很多,不同操作系统用不同的进程标识符格式不同,所以采用了端口号来明确标志不同进程,与操作系统无关。
端口(port):一个16位(bit)端口号进行标志,一台电脑允许有65535个不同的端口号。熟记端口号:80 HTTP 、443 HTTPs
注:端口只具有本地意义,即不同电脑的同一端口号无联系!
Q2
面向连接的TCP协议
News
特点
NO.1 面向连接
三次握手与四次挥手
NO.2可靠传输
滑窗协议(回退n帧,选择性重传)
无差错,不丢失,不重复,按序到达
NO.3 全双工通信
双方都可以发送和接收数据
NO.4 面向字节流
发送和接收的仅仅是无结构的字节序列
NO.3 全双工通信
双方都可以发送和接收数据
TCP三次握手(建立连接)
经典问题 Tcp建立连接为什么只需要三次握手?
如果是两次握⼿连接,就不能判断当前连接是否是历史连接,三次握⼿则可以在客户端(发送⽅)准备
发送第三次报⽂时,客户端因有⾜够的上下⽂来判断当前连接是否是历史连接:「四次握⼿」:三次握⼿就已经理论上最少可靠连接建⽴,所以不需要使⽤更多的通信次数。
注:第三次握⼿是可以携带数据的,前两次握⼿是不可以携带数据的
TCP四次挥手(断开连接)
经典问题 Tcp建立连接为什么需要四次挥手?
服务端的ACK和FIN报文不能同时发送,因为关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。服务器收到客户端的 FIN 报⽂时,先回⼀个 ACK 应答报⽂,⽽服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报⽂给客户端来表示同意现在关闭连接。
应用
FTP ⽂件传输
HTTP / HTTPS
问
什么是流量控制?Why?
TCP 提供⼀种机制可以让「发送⽅」根据「接收⽅」的实际接收能⼒控制发送的数据量,这就是所谓的流量控制。(接收方的胃有限,不能一次吃太多)
最后窗⼝都收缩为 0 了,也就是发⽣了窗⼝关闭。当发送⽅可⽤窗⼝变为 0 时,发送⽅实际上会定时发送窗⼝探测报⽂,以便知道接收⽅的窗⼝是否发⽣了改变。此文暂不讨论!(图片来自小林coding)
问
什么是拥塞控制?Why?
在⽹络出现拥堵时,如果继续发送⼤量数据包,可能会导致数据包时延、丢失等,这时 TCP 就会重传数据,但是⼀重传就会导致⽹络的负担更重,于是会导致更⼤的延迟以及更多的丢包,这个情况就会进⼊恶性循环被不断地放⼤....于是,就有了拥塞控制,控制的⽬的就是避免发送⽅的数据填满整个⽹络。
补充
由于每次达到超时重传时,cwnd变为1,犹如过山车突然来了个急刹车,造成网络卡顿,因此需要快重传机制来避免这种现象!
cwnd = ssthresh + 3
(图片来自小林coding)
Q3
不可靠的UDP协议
应用
包总量较少的通信,如 DNS 、 SNMP 等
视频、⾳频等多媒体通信
⼴播通信 DHCP
TCP和UDP的区别
TCP 和 UDP 区别:
1. 连接
TCP 是⾯向连接的传输层协议,传输数据前先要建⽴连接。
UDP 是不需要连接,即刻传输数据。
2. 服务对象
TCP 是⼀对⼀的两点服务,即⼀条连接只有两个端点。
UDP ⽀持⼀对⼀、⼀对多、多对多的交互通信
3. 可靠性
TCP 是可靠交付数据的,数据可以⽆差错、不丢失、不᯿复、按需到达。
UDP 是尽最⼤努⼒交付,不保证可靠交付数据。
4. 拥塞控制、流量控制
TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
UDP 则没有,即使⽹络⾮常拥堵了,也不会影响 UDP 的发送速率。
5. ⾸部开销
TCP ⾸部⻓度较⻓,会有⼀定的开销,⾸部在没有使⽤「选项」字段时是 20 个字节,如果使⽤
了「选项」字段则会变⻓的。
UDP ⾸部只有 8 个字节,并且是固定不变的,开销较⼩。
6. 传输⽅式
TCP 是流式传输,没有边界,但保证顺序和可靠。
UDP 是⼀个包⼀个包的发送,是有边界的,但可能会丢包和乱序。
7. 分⽚不同
TCP 的数据⼤⼩如果⼤于 MSS ⼤⼩,则会在传输层进⾏分⽚,⽬标主机收到后,也同样在传输层
组装 TCP 数据包,如果中途丢失了⼀个分⽚,只需要传输丢失的这个分⽚。
UDP 的数据⼤⼩如果⼤于 MTU ⼤⼩,则会在 IP 层进⾏分⽚,⽬标主机收到后,在 IP 层组装完数
据,接着再传给传输层,但是如果中途丢了⼀个分⽚,则就需要᯿传所有的数据包,这样传输效率
⾮常差,所以通常 UDP 的报⽂应该⼩于 MTU。
想看更多,扫码关注我
微信号|hhl_1393603513
扫码关注
点击蓝字
关注我们