计算机网络03(传输层工作原理,TCP/UDP协议)
一:介绍传输层
1.作用:传输层是整个中的关键层次之一,主要负责向两个主机中之间的提供服务。由于一个主机同时运行多个进程,因此运输层具有复用和分用功能。传输层在终端用户之间提供透明的数据传输,向上层提供可靠的数据传输服务。传输层在给定的链路上通过流量控制、分段/重组和差错控制来保证数据传输的可靠性。传输层的一些协议是面向链接的,这就意味着传输层能保持对分段的跟踪,并且重传那些失败的分段。
2.主要协议:传输层的服务一般要经历传输连接建立阶段,阶段,传输连接释放阶段3个阶段才算完成一个完整的服务过程。而在数据传送阶段又分为一般数据传送和加速数据传送两种形式。传输层中最为常见的两个协议分别是(Transmission Control Protocol)和UDP(User Datagram Protocol) [1] 。传输层提供逻辑连接的建立、传输层寻址、数据传输、传输连接释放、流量控制、拥塞控制、多路复用和解复用、崩溃恢复等服务。
TCP端口 :Transmission Control Protocol,TCP是一种面向连接(连接导向)的、可靠的、基于的(Transport layer),由IETF的RFC 793说明(specified)。在简化的中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的。 UDP端口 : User Datagram Protocol,UDP是参考模型中一种的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是与上层协议的。UDP协议适用端口分别运行在同一台设备上的多个应用程序。
二:TCP协议
1.TCP包头结构信息
tcp头部信息出现在每个tcp报文段中,用于指定通信的源端端口,目的端口,管理tcp连接等。tcp头部结构如下图所示:
1.、网络通信四元组和五元组
四元组:源IP地址、目的IP地址、源端口、目的端口 五元组:源IP地址、目的IP地址、协议号、源端口、目的端口
2、16位源端口号和16位目的端口号
16位代表着16位二进制数,所以端口号的范围是0~2^16,也就是0~65535 lsof -i:查看端口号被哪个进程占用了yum install lsof -y nc 扫描嗅探其他鸡齐全开放了哪些端口 yum install nc -y nmap 探测一个机器或者整个局域网开放了哪些端口 yum install nmap -y netstat 本机开放了哪些端口 yum install net-tools -y
3、32位序列号
初始序列号ISN=M+Md5,后续的tcp报文段中序号值将被系统设置成ISN加上该报文段所携带数据的第一个在整个字节流中的偏移。 序列号没有顺序,为了安全性,黑客不容易猜到序列号伪造进行攻击 序列号回环选项里加上时间戳timestamp,确认先后顺序。
4、32位确认号
用作对另一方发送来的tcp报文段的相应。其值是收到的tcp报文段的序号值加1。
5、6位保留位(标志位)
URG标志,表示紧急指针是否有效 ACK标志,表示确认号是否有效。称携带ACK标志的tcp报文段位确认报文段 PSH标志,提示接收端应用程序应该立即从tcp接受缓冲区中读走数据,为接受后续数据腾出空间(如果应用程序不将接收的数据读走,它们就会一直停留在tcp缓冲区中) RST标志,表示要求对方重新建立连接。携带RST标志的tcp报文段为复位报文段。 SYN标志,表示请求建立一个连接。携带SYN标志的tcp报文段为同步报文段。 FIN标志,表示通知对方本端要关闭连接了。携带FIN标志的tcp报文段为结束报文段。
6、16位窗口大小
是tcp流量控制的一个手段。这里说的窗口,指的是接收通告窗口。它告诉对方本端的tcp接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。
7、16位校验和
由发送端填充,接收端对tcp报文段执行CRC算法以校验tcp报文段在传输过程中是否损坏。注意,这个校验不仅包括tcp头部,也包括数据部分。这也是tcp可靠传输的一个重要保障。
8、16位紧急指针
是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一个字节的序号。因此,确切的说,这个字段是紧急指针相对当前序列号的偏移,称为紧急偏移。tcp的紧急指针是发送端向接收端发送紧急数据的方法。
2.三次握手
确保双方都能通信且具有收发数据的能力。
1、流程
首先客户端主动打开端口,服务器需要开放端口处于listen状态,客户端发送第一个表示请求连接SYN为1、序列号seq随机为x的包;服务端收到后回应一个请求连接SYN为1、表示确认收到请求的ACK为1、自己随机的序列号y和ack为发送过来序列号+1的包,注意这里只能证明服务端能收到客户端的包;所以要证明客户端能收到服务端的包,客户端还要回一个表示确认收到的ACK为1,seq自己的序列号+1和服务端发送的ack序列号+1的包;至此双方都能正常传输数据。
2、尝试连接
如果双方有迟迟收不到回应的包时,会有重发请求包。 内核参数中可查看重试次数/proc/sys/net/ipv4下的/tcp_syn_retries、tcp_synack_retries 配置文件可以修改次数 vim /etc/sysctl.conf,从sys后面开始用.隔开,生效内核参数sysctl -p,查看参数sysctl -a
3、连接状态
4、队列信息
接收队列(Recv-Q)和发送队列(Send-Q)使用netstat命令分别是 0 0表示正常 使用队列容量(Recv-Q)和最大队列容量(Send-Q)使用ss命令表达的是 0 max
3.四次挥手
目的是表示断开连接,双方确认数据传送完或者接收完后断开连接。
1、流程
首先是客户端发送完数据后向服务端发送一个表示请求关闭连接FIN为1、随机随机序列号u的包;服务端收到后发出一个表示确认收到关闭请求ACK为1、自己随机序列号v和ack为收到序列号+1的包,注意这里客户端需要等待服务端主动发起请求关闭,因为服务端要进行数据确认,是否所有数据都收到;确认完毕服务端主动发起关闭请求,发送一个FIN为1、自己随机序列号w,ack为收到序列号+1的包给客户端;客户端最后发起一个表示确认收到关闭请求ACK为1、seq为自己序列号+1和收到序列号+1的包。服务端收到确认包后关闭,客户端在等待2MSL后也关闭。
2、timewait
3、为什么必须是三次握手,不能用两次握手进行连接?
记住服务器的资源宝贵不能浪费! 如果在断开连接后,第一次握手请求连接的包才到会使服务器打开连接,占用资源而且容易被恶意攻击!防止攻击的方法,缩短服务器等待时间。两次握手容易死锁。如果服务器的应答分组在传输中丢失,将不知道S建立什么样的序列号,C认为连接还未建立成功,将忽略S发来的任何数据分组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。
4、为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
建立连接时,ACK和SYN可以放在一个报文里来发送。而关闭连接时,被动关闭方可能还需要发送一些数据后,再发送FIN报文表示同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
5、为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
两个存在的理由:1、无法保证最后发送的ACK报文会一定被对方收到,所以需要重发可能丢失的ACK报文。2、关闭链接一段时间后可能会在相同的IP地址和端口建立新的连接,为了防止旧连接的重复分组在新连接已经终止后再现。2MSL足以让分组最多存活msl秒被丢弃。
4.流量控制
1、停止等待协议
发送一个包,收到响应确认后再发第二个,效率低。 重传计时器:第一个包发过去没有响应,重发第一个
2、ARQ协议
连续发很多包,确认最后一个再发,累计确认。退回n帧:中途丢包就中途的重发;选择重传:哪个包丢了就发丢失的包,确认其他包到了sack选项;滑动窗口:用来存储传过来的数据,本质是缓存
3、接收数据和发送数据
数据从用户空间拷贝到内核空间,Tx Ring加头部信息,发送报文和接收报文,网卡开始--》通过Tx ring接收包--》把数据加入sk_buffer队列解包--》TCP/IP协议栈是看头部信息--》把数据放入socket接收队列--》把数据复制至用户空间。
4、 滑动窗口
为了提高速率,并且需要得到确认,还能丢包重发所以引用窗口;成对存在,大小协商接收方,有丢包就退回n帧和重传;已发送,未发送,移交给应用,未交给应用,未发ack,win为0,窗口暂停工作,坚持计时器确认缓存有无空间。
5、拥塞控制
拥塞窗口:一个值--发送方的窗口大小。 拥塞控制主要是四个算法: 1)慢启动; 2)拥塞避免; 3)拥塞发生(快重传); 4)快速恢复
5.差错控制
1,检验和--报文校验;把伪首部、TCP报头、TCP数据分为16位的字,如果总长度为奇数个字节,则在最后增添一个位都为0的字节。把TCP报头中的校验和字段置为0。其次,用反码相加法累加所有的16位字(进位也要累加)。最后,对计算结果取反,作为TCP的校验和。 2,确认应答序列号--ACK应答,TCP会记录哪些数据发送了,哪些数据被接受了,哪些没有被接受,并且保证数据包按序到达,保证数据传输不出差错。 3,连接管理--TCP的连接是基于三次握手,而断开则是四次挥手。确保连接和断开的可靠性。 4,超时重传--即在发送数据报文时,设定一个定时器,每间隔一段时间,没有收到对方的ACK确认应答报文,就会重发该报文。
三:UDP协议
1、UDP介绍
UDP是无连接的,不需要连接、不保证可靠交付、面向报文、没有拥塞控制、支持一对一,一对多。
2、UDP常用领域
四:TCP和UDP的对比
1、应用方面及服务端口
tcp的应用: telnet 23 远程控制的,明文传输,不安全 ssh 22 密文 http 80 mysql 3306 ftp 21 dns 53 dns的主从服务器之间的数据传输 SMTP 25 发送邮件 pop3 110 收取邮件的
2、整体对比
上一篇:
传输层工作原理