文章目录
1. 传输层概述
- 之前所学习的物理层、数据链路层、网络层它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信。
- 实际上,计算机网络进行通信的实体是位于通信两端主机中的进程。
- 如何为运行在不同的主机上的应用进程提供直接的通信服务(提供进程和进程之间的逻辑通信)是运输层的任务,运输层又称为端到端协议。
2. 运输层端口号、复用与分用的概念
在网络中采用发送方和接收方的套接字组合来识别端点,套接字唯一标识了网络中的一个主机和它上面的一个进程。
套接字Socket=(主机IP地址,端口号)
端口号作用的例子:
3. TCP与UDP的对比
- UDP支持单播、多播以及广播
- TCP仅支持单播(一对一)
- UDP是面向应用报文的,适合一次性出传输少量数据的应用
- TCP是面向字节流的,
- UDP向上层提供面向无连接不可靠传输服务,无拥塞控制(适用于IP电话、视频会议等实时应用)
- TCP向上层提供面向连接(虚连接)可靠的传输服务,有拥塞控制(适用于要求可靠传输的服务,例如文件传输)
- 可靠:保证接收方进程从缓存区读出的字节流和发送方发出的字节流是一样的。
- UDP用户数据报首部仅8字节,
- TCP报文段首部最小20字节,最大60字节
- TCP提供全双工通信
- 接收缓存:按序到达但尚未被接受应用程序读取的数据/不按序到达的数据
- 发送缓存:准备发送的数据/已发送但尚未收到确认的数据
4. TCP报文段的首部格式
序号:在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,本字段表示本报文段所发送数据的第一个字节的序号。
确认号:期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1为止的所有数据都已正确收到。
数据偏移(首部长度):TCP报文段的数据起始处距离TCP报文段的起始处有多远,以4B为单位,即一个数值是4B。
5. TCP
5.1 流量控制
流量控制:让发送方的发送速率不要太快,要让接受方来得及接受(利用滑动窗口机制可实现)。
5.2 拥塞控制
5.3 TCP可靠传输的实现
5.4 TCP的运输连接管理(握手、挥手问题)
5.4.1 建立连接(握手)
5.4.2释放连接(挥手)
终止FIN:用来释放连接。为1时,表明此报文段的发送方的数据已发送完毕。
seq:等于TCP客户进程以前已传送过的数据的最后一个字节的序号+1。
ack:等于TCP客户进程之前已收到的数据的最后一个字节的序号+1。
若没有等待2MSL将是什么情况呢?
第四次挥手时,客户端发送给服务器的 ACK 有可能丢失,如果服务端因为某些原因而没有收到 ACK 的话,服务端就会重发
FIN,如果客户端在2*MSL 的时间内收到了 FIN,就会重新发送 ACK 并再次等待 2MSL,防止 Server 没有收到 ACK
而不断重发 FIN。 如图所示: