运输层
5.1概述
5.2运输层端口号、复用与分用的概念
5.9UDP与TCP对比
UDP对应用报文丢下来的的报文既不合并也不拆分,面向应用报文
TCP面向字节流
5.4TCP流量控制
5.5TCP拥塞控制
四种算法:
5.6TCP超时重传时间的选择
5.7TCP可靠传输的的实现
5.8TCP的运输连接管理
5.8.1TCP的连接建立
要解决的三个问题:
- 是TCP双方能够确认双方的存在
- 是TCP双方能够协商一些参数(如最大窗口值,是否使用窗口扩大选项和时间戳选项以及服务质量等)
- 是TCP双方能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配
TCP客户主动发起连接,TCP服务器被动等待连接,
最初两端TCP进程都处于关闭状态,已开始TCP服务器进程首先创建传输控制块,用来存储TCP连接中的控制信息(TCP连接表,指向发送和接收缓存的指针,指向重传队列的指针,当前发送和接收的序号),只有就准备接受TCP客户的连接请求。此时TCP服务器进程进入监听状态,等待TCP客户进程的连接请求。TCP服务器进程被迫等待,被动打开连接。TCP客户进程首先创建传输控制块。然后在打算建立TCP连接时,向TCP服务器进程发送请求报文段,并进入同步发送状态。TCP连接请求报文段首部中的同步为SYN被设置为1,表明这是一个TCP连接报文段,序号字段seq被设置了一个初始值x,作为TCP客户进程所选择的初始序号。(注:TCP规定SYN被设置为1的报文段不能携带数据,但要消耗掉一个序号)。由于TCP连接是由客户主动发起的,所以称为主动打开连接。TCP服务器进程收到TCP连接请求报文段后,如果同意建立连接,则向客户进程发送TCP连接请求确认报文段,并进入同步接收状态,该报文段首部中的SYN和确认位ACK都设置为1,表明这是一个TCP连接请求确认报文段。序号字段seq被设置为一个初始值y,作为TCP服务器进程选择的初始序号,确认号字段ack被设置为x+1,这就是对客户进程所选择的初始序号的确认。客户进程收到连接请求确认报文段后,还要向服务器进程发送一个普通的TCP确认报文段,并进入连接已进入状态,ACK被设置为1,表明这是一个普通的TCP确认报文段,seq设置为x+1,这是因为客户进程发送的第一个TCP报文的序号为x,并且不携带数据;(注:TCP确认报文段可以携带数据,但如果不携带数据,则不消耗序号,这种情况下,所发送的下一个数据报文段的序号仍是x+1),确认号字段ack设置为x+1,对服务器进程所选择的初始序号的确认。服务器进程收到该报文段后进入连接已建立状态。