运输层简单描述
- 运输层将从应用层接收到的数据转换成运输层分组称之为数据段
- 运输层为两个主机上的进程提供了逻辑通信(约定格式),网络层提供的是物理通信(电缆网线)。
运输层多路复用
- 多路复用:从发送方主机的不同套接字中收集数据块,并封装成为数据段,再将数据段发送出去的过程称之为多路复用。
运输层多路分解
- 多路分解:接收方主机在收到数据段的时候要匹配不同的端口即匹配不同的套接字,这个过程称之为多路分解。
UDP协议
- UDP无非就是对网络层增加了一点多路复用与多路分解的服务。面向无连接。
TCP协议
-
tcp报文格式:
-
tcp面向连接。描述tcp建立连接与断开连接过程
client端:
closed -> syn_sent -> established -> fin_wait_1 -> fin_wait_2 -> time_wait -> closed
server端:
closed -> listen -> syn_rcvd -> established -> close_wait -> last_ack -> closed -
为何要进行三次握手而不是两次或四次:
两次握手存在的问题是网络并发量大导致某节点阻塞,主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺利完成数据传输。如果被阻塞的连接请求延误到连接释放以后到达B端,B会误认为A又发送了新的请求,同意连接,一直等待A发送数据,造成资源浪费。三次连接是保证可靠的最小握手次数,再多次握手也不能提高通信成功的概率,反而浪费资源,因此没必要四次或更多次握手。
-
为何要进行四次挥手:
四次挥手,本质是因为TCP是全双工的,当一方请求关闭连接时仅仅表示这一方发送数据完毕,但另一方未必会马上关闭socket(如同码头)因为还正在传送数据。因此要再发送fin报文表示同意关闭连接了。 -
为何要进行TIME_WAIT=2MSL:(MSL(Maximum Segment Lifetime)报文最长存活时间)
为了保证B收到了A的确认应答。 若A发完确认应答后直接进入CLOSED状态,那么如果该应答丢失,B等待超时后就会重新发送连接释放请求,但此时A已经关闭了,不会作出任何响应,因此B永远无法正常关闭。如果相同的IP地址和端口建立另一个连接,因为它们的IP地址和端口号都相同,TCP必须防止来自上一个连接的老的重复分组已经终止。既然 TIME_WAIT状态的持续时间是MSL的2倍,这就足以让某个方向上的分组最多存活msl秒即被丢弃,另一个方向上的应答最多存活msl秒也被丢弃。 通过实施这个规则,我们就能保证每成功建立一个TCP连接时。来自该链接先前化身的重复分组都已经在网络中消逝了。 -
TCP拥塞控制机制:拥塞控制分为端到端的控制和网络辅助的控制,tcp采用的是端到端的控制,因为ip层不向端系统提供显示的网络阻塞反馈。