传输层的协议
前言
TCP/IP协议簇的传输层协议主要有两个:TCP(传输控制协议)和UDP(用户数据报协议)
TCP协议协议传输更加稳定可靠,UDP协议传输效率更高
一、TCP协议介绍
1.TCP是面向连接的、可靠的进程到进程通信的协议
这里可以理解为打电话,对方拿起话筒应答,即线路接通了,才能互相通话
且提供全双工服务,即数据可在同一时间双向传输,每一个TCP都能发送缓存和接收缓存,用来临时存储数据以达到双向通信。这里可以理解为视频通话,双方可以同时说话,如同面对面直接交流一样
二、TCP报文格式
TCP将若干个字节构成一个分组,称为报文段
TCP报文段封装在IP数据报中,如下图
IP首部 | TCP报文段 |
---|
下面来看一看TCP报文段的首部格式
首部长度为20~60字节,以下是各字段的含义
- 源端口号:16字段,为发送方进程对应的端口号
- 目标端口号:为16字段,对应接收端的进程。接收端收到数据段后,根据这个端口号来确定把数据送往哪个应用程序的进程
- 序号:发送端为每一个字节进行编号,以便接收端正确重组
- 确认号:对发送端的确认信息,用来告诉发送端这个序号之前的数据段都已收到。如确认号是x,就代表着前X-1个数据段都已收到,并期望下次数据段可以从x开始发送
- 首部长度:用它可以确定TCP首部数据结构的字节长度。一般情况下是20字节,但首部长度最大可以扩展为60字节
- 保留:作为今后扩展功能使用,现在还没使用到
- 控制位:这六位很重要,TCP的连接、传输和断开都受这六个控制位的指挥
1.URG:紧急位,优先,配合紧急指针使用
2.ACK:却认位,只有当ACK=1时,确认***字段才有效;为0时则无效
3.PSH:急迫位,标志位为1时,要求接收方尽快将数据送达应用层
4.RST:重置位,值为1时通知重新建立TCP连接
5.SYN:同步(连接)位,TCP需要建立连接时将这个值设为1
6.FIN:断开位,TCP完成数据传输需要断开连接时,提出断开连接的一方将这个值设为1 - 窗口大小:说明本地可接收数据段的数目,这个值的大小可变。当网络流畅时这个值可以变大加快传输速度,网络不稳定时减小这个值可以保证网络数据的可靠传输。TCP协议中的流量控制机制就是依靠窗口值的大小实现的
- 校验和:用来做差错控制,与IP的校验和不同,TCP校验和包括首部、数据和其他填充字节。在发送TCP数据时,由发送端计算校验和,当到达目的地再进行一次校验和计算。若一致则说明数据正确,否则将认为数据已损坏或丢失,将丢弃该数据
- 紧急指针:和UGP配合使用,当UGP=1时有效
- 选项:在TCP首部可以有多大40字节的可选信息
三、TCP三次握手
因为TCP是使用IP服务,是虚连接而不是物理连接,TCP报文段封装成IP数据报后,每个IP数据报可以走不同的路径到达终点,因此IP数据报可能不按顺序到达,甚至损坏或丢失。
这个时候,TCP会保证报文段是有序有效的。
而TCL建立连接的过程称为三次握手,主要是为了确认双方收发数据的能力。下面来介绍一下
1.第一次握手,发送SYN报文
PC1使用一个随机的端口号(Seq=x)向PC2发送建立连接请求(SYN=1)
也就是我发送一封邮件给对方,对方接收到了,那他就知道我能发和他能收
2.第二次握手,发送SYN+ACK报文
PC2收到了PC1的消息,向PC1回复一个确认信息(Seq=y,Ack=x+1),然后再向PC2发送一个建立连接的请求(SYN=1,ACK=1)
即这时他要给我回信确认,我若收到了,我便知道了我的确能发他也能收,并且他能发和我能收
3.第三次握手,发送ACK报文
PC1收到了PC2的回复(包括请求和确认),也要向PC2再发送一个确认信息,Seq=x+1(第一次握手时是x,所以这次是x+1),Ack=y+1,ACK=1
然而此时他还不知道他的发件能力和我的收件能力怎样,于是我最后反馈一次,他若收到了,便清楚了他的发件能力和我的收件能力是可以的(好绕啊~)
四、TCP四次挥手
TCP断开连接分四步,也称为四次挥手第一次挥手:PC1向PC2发送报文(FIN=1,ACK=1)这以后PC1不能再向PC2发数据但是可以正常收
第二次挥手:PC2收到后回复确认ACK报文(AKC=1),这时处于等待关闭状态而不是立马给PC1发FIN报文,因为可能服务端还有数据没发完
第三次挥手:PC2向PC1也发送FIN/ACK报文(FIN=1,ACK=1)
第四次挥手:PC1收到后,最后向PC2发送确认报文(ACK=1)
五、UDP协议介绍
UDP是一个无连接、不保证可靠性的传输层协议,也就是说发送端不关心数据是否到达目标主机、数据是否出错等,而且收到数据的主机也不会告诉发送方是否收到了数据,它的可靠性由上层协议来保障
由此传输数据速度更快,效率更高
无连接网络协议指双方通信前不必先与对方建立连接,不用管对方状态就可以直接发送。这个就像是发短信,只要你自己网络是好的就行,直接可以发送到对方那里
总结
- TCP是一个可靠的面向连接的协议
- TCP建立连接要经历三次握手
- TCP断开连接要经历四次挥手
- UDP是一个不可靠无连接的协议