当前位置:网站首页>传输层协议介绍
传输层协议介绍
2022-08-09 07:54:00 【眼下一颗柠檬】
前言
什么是传输层?
传输层就是定义传输数据的协议端口号,以及流控和差错校验(防火墙,端到端),实现网络中不同主机上的用户进程之间的数据。
TCP/IP协议族的传输层协议包括TCP(Transmission Control Protocol)传输控制协议、和UDP(User Datagram Protocol)用户数据报协议
一、TCP协议介绍
TCP协议是面向连接的、可靠的进程到进程通信的协议
TCP协议提供全双工服务,即数据可在同一时间双向传输
TCP报文段:TCP将若干个字节构成一个分组,叫报文段。TCP报文段封装在IP数据报中。
面向连接是指通信双方之间在进行通信之前要先建立连接,等数据发送结束后,双方再断开连接。
二、TCP报文格式
TCP报文段格式:
源端口号:发送端进程的端口号。
目标端口号:接收端进程的端口号。接收端收到数据段后,根据这个端口号来确定把数据送到哪个应用程序的进程。
序号:发送端为每个字节进行编号,便于接收端正确重组。
当TCP从进程接收数据字节时,把它们分片成数据段存储在发送缓存中,并对每个字节进行编号。当数据到达目的地后,接收端会按照这个序号把数据重新排列,保证数据的正确性。
确认号:对发送端的确认信息。
接收端相应消息时,将会用它来告诉发送端这个序号之前的数据段已经收到,如确认号是x,就是表示前x-1个数据段都已经收到。
首部长度:用它可以确定TCP首部数据结构的字节长度。一般情况下TCP首部是20字节,但首部长度最大可以扩展为60字节。
控制位:
URG:紧急位。紧急指针有效位。
ACK:确认位。只有当ACK=1时,确认序列号字段才有效:当ACK=0时,确认号字段无效。
PSH:急迫位。标志位为1时,要求接收方尽快将数据段送达应用层。
RST:重置位。当RST值为1时,通知重新建立TCP连接。
SYN:同步(连接)位。同步序号位,TCP需 要建立连接时将这个值设为1。
FIN: 断开位。当TCP完成数据传输需要断开连接时,提出断开连接的一 方将这个值设为1。
窗口大小:说明本地可接收数据段的数目。这个值的大小是可变的,当网络通畅时接收端响应消息会将这个窗口值变大以加快传输速度,当网络不稳定时减小这个值可保证网络数据的可靠传输,TCP中的流量控制机制就是依靠变化窗口的大小实现的。
校验和:用来做差错控制。字段检验的范围包括首部和数据这两部分。数据段在发送时和到达目的地时会进行校验和计算,若这两次的校验和一致,则说明数据基本是正确的,否则将认为该数据已被破坏,接收端将丢弃该数据。
紧急指针:和URG配合使用,当URG=1时有效。
选项:在TCP首部可以有多达40字节的可选信息。
重点了解控制位,在TCP三次握手与四次挥手用到
三、TCP三次握手
1、第一次握手:客户端向服务器端发送建立SYN报文(seq=x,SYN=1),请求与服务器端建立连接,此时客户端处于同步已发送状态(SYN-SENT)。(客户端向服务器端发送建立连接请求)
2、第二次握手:服务器端收到数据包后由标志位SYN报文后知道客户端请求建立连接,服务器端同意建立连接,并将同意连接的SYN和ACK(SYN=1,ACK=1,seq=y,ack=x+1)发送给客户端以确认连接请求,服务器端进入同步收到状态(SYN_RCVD)。(服务器端收到客户端的请求,并回复同意连接)
3、第三次握手:客户端收到服务器端发来的确认,并向服务器端发送ACK报文(seq=x+1,Ack=y+1,ACK=1),此时客户端进入到已建立连接状态(ESTABLISHED)。完成三次握手,客户端就可以向服务器端传输数据了。(客户端收到服务器端的同意,要和服务器端说我收到你的同意了,才能建立连接)
四、TCP的四次挥手
1、第一次挥手:客户端向服务器端发送一个FIN(FIN=M)断开请求,表示自己要断开连接,我没有数据要发送了,此时客户端进入到终止等待-1状态(FIN-WAIT-1)(客户端要和服务器断开连接)
2、第二次挥手:服务器端收到FIN后,先发送ack=M+1),告诉客户端,你的请求我收到了。这个时候客户端就进入终止等待状态(FIN_WAIT_2 ),服务器端进入到关闭等待状态(CLOSE-WAIT)(服务器端收到了客户端断开连接的请求)
3、第三次挥手:服务器端也需要向客户端发送一个FIN断开请求,告诉客户端我准备好和你断开连接了。此时服务器端进入到LAST_ACK状态。(服务器端表示可以和客户端断开连接)
4、第四次挥手:客户端收到服务器端发来的FIN后,进入到时间等待状态(TIME-WAIT),并且客户端要向服务器端发送ACK报文,表示客户端确认断开连接的请求,服务器收到ACK之后就知道可以断开连接了,此时服务器端进入CLOSED状态,完成四次挥手。(客户端表示收到了服务器端的请求,确认和服务器端断开连接)
五、常见的TCP端口号及其功能
端口 | 协议 | 说明 |
---|---|---|
21 | FTP | FIN服务器所开放的控制端口 |
23 | TELNET | 用于远程登陆,可以远程控制管理目标计算机 |
25 | SMTP | SMTP服务器开放的端口,用于发送邮件 |
80 | HTTP | 超文本传输协议 |
110 | POP3 | 用于邮件的接收 |
67(服务端)68(客户端) | DHCP | 动态主机分配协议 |
53 | DNS | 域名解析协议 |
20 | FTP | 是否会用到20端口与FTP传输模式有关,主动模式使用20端口传输,被动模式下服务器端和客户端协商决定端口。 |
六、UDP协议
1、UDP协议是无连接、不可靠的传输协议,花费开销小。
2、UDP报文的首部格式
UDP长度:用来指出UDP的总长度,为首部加上数据。
校验和:用来完成对UDP数据的差错校验,它是UDP协议提供的唯一的可靠机制。
3、常见的UDP端口号极其功能
端口 | 协议 | 说明 |
---|---|---|
69 | TFTP | 简单文件传输协议 |
111 | RPC | 远程过程调用 |
123 | NTP | 网络时间协议 |
总结
了解到TCP协议以及TCP的报文格式
图文深刻理解了TCP三次握手和四次挥手是如何进行的
知道TCP与UDP的区别:TCP是面向连接的,UDP是无连接的;TCP是可靠的,而UDP是不可靠的;TCP保证数据的正确性、UDP不保证(可能丢包);TCP保证数据顺序、UDP同样不保证。
思考
为什么连接的时候是三次握手,断开的时候是四次挥手?
1、为什么三次握手
原因一:客户端和服务端两次握手建立连接,那就是客户端发送请求,服务端选择拒绝或者同意。如果在网络比较差的环境,客户端发送了一次请求,服务端迟迟没收到,客户端再一次发送了请求,客户端和服务端就建立了连接、传输数据到断开连接。可是还有一次请求是服务器因为网络问题没收到,之后服务器收到了那一次请求以为是客户端要再次建立连接,因为两次握手,所以客户端和服务端又一次连接上了,这样就会造成错误的连接。
原因二:如果客户端和服务端两次握手连接,就不需要进行序列号的确认工作了,因为在回复确认的报文中都会有序列号的存在,序列号的作用就是保证二者连接的稳定可靠,所以TCP握手必须是三次。
2、为什么四次挥手
试想一下,如果是二次挥手:在服务端回复确认收到之后,客户端就断开了连接,假如服务端还有数据没有发,那客户端已经断开了连接,那客户端就接收不到接下来的数据了。
如果是三次挥手:客户端发送断开请求,服务端发送请求确认,服务端发送断开请求。如果服务端的第三次请求发送完毕服务端就关闭了,可服务端不知道客户端到底接没接收到这个请求,如果客户端没接收到请求,就会一直等待,但是服务端已经断开连接了,没有数据要发了。
所以TCP的挥手必须有第四次,就是客户端向服务端发送确认收到的报文,这样服务端知道了客户端已经收到,所以服务端就可以断开连接了
边栏推荐
猜你喜欢
随机推荐
[STL]vector
C: print the diamond
EXCEL使用函数联调(find,mid,vlookup,xlookup)
db2数据库备份恢复问题
Pytorch中 nn.BatchNorm2d() 归一化操作
Important news丨.NET Core 3.1 will end support on December 13 this year
线程API
软件测试的岗位会越来越少吗?
2042. 检查句子中的数字是否递增
收藏!Solidworks从设计到制造流程解决方案 2022来了!
MUV LUV EXTRA 2019CCPC Qinhuangdao Station J Question KMP
yolov5 detects the number of labels in the dataset
975. 奇偶跳 有序集合
图像处理(一)图像基础
View log common commands
LeetCode:876. 链表的中间结点————简单
The String class objects created by the JVM memory allocation and the difference between equals and = =
74HC595 chip pin description
Invoker 2019CCPC Qinhuangdao Station I Question Simple DP
信息反馈平台的设计与实现(一、项目设计)