部分内容来源于网络,侵删~










第五章 传输层
概述
传输层提供进程和进程之间的逻辑通信,靠**套接字Socket=(主机IP地址,端口号)**找到应用进程。
传输层会对收到的报文进行差错检测。
比特流(物理层)-> 数据帧(数据链路层) -> 分组 / IP 数据报(网络层) -> 报文段(传输层)
传输层有两个协议 TCP(可靠,面向连接,时延大,适用于大文件) 和 UDP(不可靠,无连接,时延小,适用于小文件)。
1.TCP是面向连接(虚连接)的传输层协议。
2.每一条TCP连接只能有两个端点,TCP 层主要任务是向用户提供可靠的端到端服务。
3.TCP提供可靠交付的服务,无差错不丢失、不重复、按序到达。可靠有序,不丢不重
4.TCP提低全双工通信。
发送缓存:准备发送的数据&已发送但尚未收到确认的数据
接收缓存:按序到达但尚未被接受应用程序读取的数据&不按序到达的数据
序号:在一个TCP连接中传送的字节流中的。每一个字节都按顺序编号,本字段表示本报文段所发送数据的第一个字节的序号。
确认号:期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1 为正的所有数据都已正确收到。
数据偏移式(首部长度):TCP报文段的数据起始处距离报文段的起始处有多远,以4B为单位,即1个数值是4B。

运输层处于面向通信部分的最高层,同时也是用户功能中的最低层,向它上面的应用层提供服务,运输层为应用进程之间提供端到端的逻辑通信。
接收方收到有差错的UDP 用户数据报时直接丢弃。
三次握手四次挥手
TCP 建立连接采用客户端服务器方式(C / S) 。


可靠传输、拥塞控制、流量控制
传输层:使用TCP实现可靠传输
网络层:提供尽最大努力交付,不可靠传输
可靠 -- 保证接收方进程从缓存区读出的字节流与发送方发出的字节流是完全一样的。
TCP实现可靠传输的机制:1. 校验 2. 序号 3. 确认 4. 重传
流量控制:让发送方慢点,要让接收方来得及接收。
TCP利用滑动窗口机制实现流量控制。
在通信过程中,接收方根据自己接收缓存的大动态地调整发送方的发送窗口大小,即接收窗口rwnd(接收
方设置确认报文段的窗口字段来将rwnd通知给发送方),发送方的发送窗口取接收窗rwnd和拥塞窗口cwnd
的最小值(拥塞窗口:发送方根据自己估算的网络拥塞程度而设置的窗口值,反应网络当前容量)
出现拥塞的条件:
对资源需求的总和 -> 可用资源
网络中有许多资源同时呈现供应不足→网络性能变坏→网络吞吐量将随输入负荷增大而下降
拥塞控制:防止过多的数据注入到网络中。全局性
拥塞控制 & 流量控制
慢开始,拥塞避免;快重传,快恢复。
例题

当应用程序使用面向连接的TCP和无连接的 IP 时,这种传输是面向连接的还是无连接的?这要在不同层次来看。 在运输层是面向连接的,而在网络层则是无连接的。
接收方接收到有差错的 UDP 用户数据报会直接丢弃。
如果应用程序使用 UDP 完成可靠传输,理论上也是可行的,只是将 TCP 的一套机制放在 UDP 上,所以实现起来可能会更复杂。



4# 发送给B,但是时间超时,需要重传 4# ,结果收到 3# 的确定,但是此时没有编号,所以只是收到了确认,会误认为 4# 的确认,会继续传 5# ,导致 4# 的报文段丢失。导致报文段丢失。



