传输层的作用
传输层–数据段,在传输层中数据会被分段
1.源主机和目标主机之间提供一个可靠的数据传输和通信服务
数据分段和重组
发送方:上层的应用程序传输的数据会被进行分段,每个数据段都会有一个序列号,添加一定的控制信息
接收方:在传输层把分段的数据进行重组,形成一个完整的数据
连接管理:可以建立,维护已经终止源主机和目的主机之间的连接。TCP/UDP主流都是TCP
可靠性保证:主要针对TCP,数据分段后的有序传递以及数据丢失后的检测已还有重传,数据检测和纠错机制。确保传输过程中的数据完整性和可靠性。
流量控制
拥塞控制
传输层的主要作用:
1、数据分段,重组。
2、连接管理(如何建立连接,如何断开连接)
3、TCP是端到端通信(端口对端口)
TCP当中包含源端口和目的端口
协议:数据通信过程中的规则,和约定,以及交互方式。
TCP协议
面对连接,端口到端口,建立通信。
程序:开发写好的代码,未运行,就是程序。
进程:已经开始执行的代码就是进程
服务:由进程提供的特定功能
进程到进程:两个执行起来的程序之间进行端口通信
TCP全双工服务,数据可以在同一时间内双向传输
TCP发现缓存和接受缓存,用来临时存储数据
缓存:临时数据
TCP(传输控制协议):通信双方建立通信之前必须要先建立连接
UDP协议
UDP(用户数据报协议):无连接,不保证传输的可靠性,发送端不关心发送的数据是否能够到达目标主机。数据是否出错也不在考虑范围之内。
接收方:也不会告诉发送方是否收到了数据。
可靠性由上层协议来进行保证,用户自定义。
延迟:UDP ping 42mm 将协议封装进了UDP
主流的还是TCP: 安全可靠,速度相对较慢
UDP:效率高,不安全
TCP报文的字段
源端口:发送方的端口
目的端口:接受方的端口
stream index : 1 (序列号),(索引号)
flag:标志位。TCP协议用来控制连接的符号
URG:紧急位,优先级较高的数据需要立刻通过的时候,才会有这个紧急位,要生效的话URG=1
ACK:确认位 只有ACK等于1时确认的序列号字段才有效 ACK=0 无效
Ack:接收方期望收到发送方下一个报文段的第一个字节数据的编号
接收方希望你发送方下一次发的数据的第一个字节的编号为确认号,确认传输是否正常。
PSH:急迫位,立刻送达应用层 PSH=1
RST:重置位,RST=1,通知重新建立TCP连接
SYN:同步/连接位。需要建立连接的第一步,必须要发送SYN SYN=1
FIN:断开位,FIN=1时,表示要断开连接。
SEQ:报文序号
WIN:接受缓冲区的空闲空间
所有的基于TCP协议的通信,第一步都是建立连接。建立连接一定是三次握手。
三次握手
PC1发送建立连接的请求
SYN=1 表示我希望和PC2建立连接 seq=1
PC2
SYN=1 ACK=1 确认同意建立连接 Ack=(1+1)确认身份,确认你是PC1
PC1
ACK=1(seq=1+1=2告诉PC2我是PC1),Ack=2+1=3(确认双方的数据传输)
客户端到服务端
客户端发送到服务端,建立连接的请求
客户端:SYN=1
服务端:SYN=1 ACK=1
客户端:ACK=1
为什么不需要第四次确认。两次确认已经分别确定了双方的序列号。已经知道了双方是谁,不需要再进行第四次确认了
四次挥手
PC1和PC2
PC1断开连接:
第一步
FIN=1 ACK=1 断开-确认
第二步
PC2:ACK=1 确认是PC1
第三步
PC2:FIN=1 ACK=1 ,我要和PC1断开,并且确认
第四步
PC1 :ACK=1 确认断开
四次挥手:PC1发送断开连接之后,PC2回复ack确认,这个时候PC1将不再向PC2发送数据。PC2还要继续接受PC1没有处理完的数据。全部收到,处理完毕之后,PC2才会向PC1发生确认断开。PC1发送ACK,确认断开。
为什么是四次挥手不是三次挥手?
主要就是为了防止另一端发送的数据接收方还没有接受完毕,直接关闭会导致数据丢失,所有要有等待数据全部接受完毕的过程,然后才能断开,以保证数据的完整
TCP半关闭