运输层在应用层和网络层之间,它为不同主机的进程之间提供了逻辑通信,运输层把从发送程序获取的数据组装成报文段,segment,然后传递给网络层,即:
应用层
运输层
网络层
运输层是衔接的桥梁,网络应用程序可以使用多种的运输层协议 。 例如,因特网有两种协议,
即 TCP 和UDP。 每种协议都能为调用的应用程序提供一组不同的运输层服务。
运输层提供的服务我们当前讨论两种:TCP和UDP
但是在不同的教材中,这两种协议处理的数据称呼不一样,TCP处理的数据被称为报文段,UDP处理的数据被称为数据报。当前,将运输层处理的数据都称为报文段。
预备知识:简单的介绍下网络层的术语
IP:网际协议,Internet Protocol,提供一种尽力而为的交付服务,因此是不可靠服务,为每个主机提供一个IP地址
一、运输层的多路复用核多路分解
接收主机如何将一个到达运输层的报文段定向以一个指定的套接字?为了实现这个功能,每个运输层报文段在头部有几个字段,在接收端,对这些字段进行检查,然后指向对应的套接字。
多路分解:将运输层中数据段的数据,交付到正确的套接字的过程
多路复用:从源主机的不同套接字取出,并附加首部信息,传递到网络层的过程
总结:
要求一、套接字有唯一标识符
要求二、每个报文段有特殊字段来表示,要交付字段到哪个套接字
如上图所示:这些特殊的字段被称为:源端口号字段和目的端口号字段,端口号是一个16位的数字,大小在0~65536之间,其中0~1024是特殊端口号,例如,80是http的,21是FTP的
二、UDP协议
建议先看下2.1和2.7.1节
UDP是无连接的,在数据传输前,发送方和接受方的运输层之间并没有握手,因此UDP被称为无连接的。
1、UDP报文段结构
长度:指示了UDP报文段中的字节数,首部+数据
校验和:用于差错检测
三、TCP协议
1、三次握手:
第一次:客户端向服务端发送一个特殊TCP报文段,特点:不包含应用层数据,但是在报文段首部中的一个标志位即:SYN被设置1,这个特殊的报文段被称为SYN报文段。另外,客户端会随机选择一个初始序号(client_isn),并存在SYN报文段中,然后将该报文段封装在一个IP数据报中,发送给服务器。
第二次:服务端收到报文段,取出TCP_SYN报文段,为该TCP分配TCP缓存和变量,向该TCP发送允许连接的报文段,特点:不包含应用层数据,SYN位设置1,然后初始序号client_isn+1,然后服务端设置自己的初始序号,sever_isn,表示,服务端收到了连接请求,并允许连接,回应了的服务段的初始序号sever_isn。这个响应报文被称为SYNACK报文段,即SYN ACK Segment。
第三次:客户端收到服务端的SYNACK报文段后,客户端也分配此次连接的缓存和变量,然后客户端向服务端发送另一个报文段,也就是建立完整连接前的最后一个报文段,最后一个报文段对服务器的允许连接报文段进行确认,将server_isn+1,并将SYN位设置为0.本次传输就可以携带应用层数据了。
完成以上三个步骤之后,客户端和服务端就可以相互发送数据的报文段了,在以后每一个报文段中,SYN位置都被置0。
2、断开的过程:四次挥手
客户端和服务端都可以选择断开,以客户端断开为例
第一步:客户端TCP发送特殊的报文段:FIN标记位设置为1
第二步:服务端收到这个报文段,发送一个确认收到报文段ACK
第三步:服务端发送自己的特殊报文段,FIN也设置为1
第四步:客户端收到服务端的报文段,发送ACK,服务端收到,此时全部断开。
3、TCP报文段结构
MSS:最大报文段长度
TCP报文段由首部字段和一个数据字段组成,数据字段包括应用数据。它的报文段结构如下:
含义:
- 源端口号:来自源主机的端口
- 目的端口号:目标主机的端口
- 序号:可靠数据传输用,是报文段字节流编号
- 确认号:可靠数据传输用,表示自己需要的接收的编号
- 首部长度:TCP首部长度可变,表示TCP首部长度
- 保留未用:
- CWR:在明确拥塞通告中使用
- ECE:在明确拥塞通告中使用
- URG:未使用
- ACK:表示确认字段中的值是否有效
- PSH:未使用
- RST:连接建立和拆除
- SYN:连接建立和拆除
- FIN:连接建立和拆除
- 接收窗口:
- 因特网校验和:
- 紧急数据指针:未使用
- 选项:
- 数据: