功能
传输层提供进程到进程的逻辑通信
复用和分用
传输层对收到的报文进行差错检测
TCP/UDP
提供进程到进程的逻辑通信
网络层是提供主机间逻辑通信
从网络层来看,通信双方为两台主机,IP数据包首部给出两台主机的IP地址
而实际上的两台主机通信时两台主机内的应用进程进行通信,应用进程间的通信也称端到端的逻辑通信
复用和分用
复用是指发送方不同的应用进程都可使用同一个传输层协议传送数据
分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程
差错检验
网络层只检查IP数据报的首部,不检验数据部分是否出错,而传输层两个都检验
传输协议
提供两种不同的传输协议,即面向连接的TCP和无连接的UDP
寻址与端口
端口的作用
- 端口使得应用层各种应用进程将数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程
- 端口是传输层服务访问点TSAP,它在传输层的作用类似 IP地址在网络层中或 MAC地址在数据链路层的作用,只是端口标识进程,IP和MAC表示主机
- 数据链路层的SAP是MAC地址,网络层的SAP是IP地址
- 硬件端口指的是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与传输实体间进行层间交互的地址
- 传输层和协议栈层间的抽象的协议端口是软件端口
端口分类
复用、分用
端口只有本地意义
端口号按范围分为服务端使用的端口号和客户端使用的端口号
套接字
Socket = (主机IP地址、端口号),使用套接字识别端点,标识主机及其某个进程
TCP/UDP
UDP
特点:
- 无连接,减少时延
- 尽最大努力交付,即不保证可靠交付
- UDP面向报文,适用于一次性传输少量数据的网络应用
- 无堵塞控制,实时性强
- UDP开销小
- 发送报文时一次性发送
由于无须建立连接,则没有建立连接的时延,强实时性,弱可靠性
UDP是无连接状态,不需要维护连接状态(接收和发送缓存、拥塞控制参数和序号与确认号的参数),因此支持更多活动客户机
分组首部开销小
TCP的首部为20B,UDP仅有8B
应用层控制发送数据和发送时间更方便
因为没有拥塞控制,应用要求稳定速度,容忍一定的数据丢失,避免大时延
UDP常用于一次性传输数据较少的网络应用
如DNS、SNMP等采用TCP则会因为连接产生开销
UDP常用于多媒体应用
UDP提供最大努力交付,应用可在应用层实现维护传输可靠性
UDP面向报文,对应用层交下来的报文添加首部就交付IP层
UDP首部格式
UDP校验
TCP
面向连接,点到点,提供可靠交付服务,无差错,提供全双工通信,面向字节流(TCP将程序提供的数据看成一连串的无结构的字节流)
TCP报文段首部格式
TCP传送的数据单元称为报文段,分为TCP首部和TCP数据两部分
首部固定20B大小,4NB字节为选项
TCP既可用于运载数据,也可用来建立连接、释放连接和应答
- 源端口和目的端口字段
- 序号字段:记录本报文发送的数据的第一个字节的序号
- 确认号字段:期望收到对方的下一个报文段的数据的第一个字节的序号,确认号为N则是表明N-1为止的所有数据都已正确收到
- 数据偏移:与IP数据报分片的数据偏移进行区别,表示的是首部长度
- 保留字段
- 紧急位URG:URG=1表明紧急指针字段有效,提示系统报文段中有紧急数据需尽快传送,URG需要和紧急指针配合使用,指定数据从第一个字节到紧急指针所指的字节就是紧急数据
- 确认位ACK:当ACK=1时生效,建立连接后必须将ACK设为1
- 推送位PSH:PSH=1时,需要尽快地交付给接收进程,而不是等待缓存填满后再向上交付
- 复位位RST:RST=1时,表明TCP连接出现差错,需要释放连接,重建连接
- 同步位SYN:SYN=1表示这是个连接请求或连接接收报文,SYN=1,ACK=0表明这是一个连接请求报文,若同意请求则发送响应报文 SYN =1, ACK =1
- 终止位FIN:释放连接,FIN=1表明报文段的发送方的数据已发送完毕,并要求释放传输连接
- 窗口字段:表明允许发送的数据量
- 校验和:与UDP相同,计算时加入伪首部
- 紧急指针字段:指出紧急数据共有多少字节,位于报文段数据最前面
- 选项字段:窗口扩大,数据段最大长度,时间戳等
- 填充字段:使得首部长度为4B的整数倍,填充0
TCP连接管理
TCP连接的管理就是使运输连接的建立和释放都能正常进行
TCP需要解决三个问题:
要使双方能够确知对方的存在
要允许双方协商一些参数,对运输实体资源进行分配
三次握手
seq为序号字段,标明本次报文段数据部分的第一个字节的序号
ack是确认号字段,告诉对方,自己接下来接收的数据是从字节序号ack开始的数据
ACK是确认位,ACK 为1标明有效,为0则无效
SYN是同步位
第一步:C向S发送连接请求,此报文段不含应用层数据,首部SYN=1,seq =x,不携带数据,但消耗一个序号
第二步:S收到连接请求报文段时,若同意建立连接时则发回确认,并为该TCP连接分配TCP缓存和变量,在确认报文段中,SYN和ACK都为1,确认号为x+1,seq为y
第三步:当客户机收到确认报文段后,还要向服务器给出确认,同样要给该连接分配缓存和变量,报文ACK=1,seq=x+1,确认号字段ack=y+1,该报文段可携带数据,若不携带则不消耗序号
TCP是全双工通信,由于服务器资源在完成第二次握手时分配,客户端的资源在完成第三次握手时分配的,使得服务器容易收到SYN洪泛攻击
SYN洪泛攻击,攻击者发送多次SYN请求连接,服务器返回ACK后不应答,造成大量连接处于半连接状态,浪费资源
四次挥手
第一步:因为要关闭连接,因此发送FIN报文,FIN=1,seq=u,此为前面已经传送过的数据的最后一个字节序号+1,发送FIN报文后,仅仅关闭其中一条数据通路(TCP的全双工属性)
第二步:S收到FIN报文,ack=u+1,seq为v,同样是前面已经传送过的数据的最后一个字段序号+1,此时处于半关闭状态,即C到S的通路关闭,但S到C的通路还未关闭,因此S向C发送数据,C仍要接受
第三步:若S没有数据需要向C发送,则发送FIN报文段,通知C释放连接
第四步:S收到FIN报文时需要发出确认,ACK=1,ack=w+1,序号seq=u+1,等到过去2MSL后,S进入连接关闭状态