浅析TCP的三次握手和四次挥手

1、计算机网络概论

1.1、计算机网络是什么?

利用通讯线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,以功能完善的网络软件及协议实现资源共享和信息传递的系统

1.2、主要网络有哪些

  • 局域网
  • 城域网
  • 广域网

计算机网络发展概史

  • 诞生阶段,单个计算机为中心的远程联机系统
  • ARPANET 多个主机通过通信线路互联起来 去中心化
  • 开放性的标准化体系结构,OSI诞生 ISO OSI参考模型 开发系统互联参考模型 IEEE TCP/IP模型
  • Internet 互联网

2、TCP/IP详解

2.1、计算机网络体系结构

image.png
各层之间的关系
每一个抽象层建立在低一层提供的服务上并且为高一层提供服务

2.2、TCP/IP协议族

TCP/IP 传输控制协议/因特网互联协议,是Internet最基本的协议,Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。协议采用了四层的层级结构。然而在很多情况下他是利用IP进行通信时所必须用到的协议群的统称

TCP/IP概念层模型 功能 TCP/IP协议族
应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
应用层 数据格式化,代码转换,数据加密 没有协议
应用层 解除或建立与别的接点的联系 没有协议
传输层 提供端对端的接口 TCP UDP
网络层 为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP
链路层 传输地址的帧以及错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU
链路层 以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2

TCP 面向链接的可靠的流协议
UDP 面向无连接的通讯协议 eg:UDT HTTP3 DNS 视频音频

2.3、网络传输中的数据

  • 包 全能性术语
  • 帧用于表示数据链路层中包的单位
  • 片是IP中数据的单位
  • 段则表示TCP数据流中的信息
  • 消息是指应用协议中数据的单位

2.4 网络通信中的地址和端口号

  • MAC地址,网络设备的唯一地址,写到设备里的地址不可更改,在物理层,链路层
  • IP地址:互联网上的网络或主机分配一个唯一的逻辑地址,是可以更改的,通讯子网划分,
  • 端口号:用来识别同一台计算机中进行通信的不同应用程序。也被称为程序地址,80 443 8080

image.png

image.png

2.5、TCP (传输控制协议)基本特性

  • 面向连接 通讯完成后还需要拆除连接,端对端

连接是虚拟连接,只要三次握手的报文正常,就算建立了连接
物理链接:固定电话
TCP的网络传输的线路不是固定的,这样设计的原因就是去中心化,防止某个网络节点坏了,不能完成通信,
因为线路不是固定的所以,数据接收方接收到的片的顺序也不是固定的,所以会有下面的数据排序的特性

  • 可靠性 超时重传和应答确认,确保通讯的可靠
  • RTT(往返时延,Round-Trip Time)和RTO(重传超时,Retransmission Timeout)

基于往返时延,重新计算重传超时的超时时间

  • 数据排序

IP层分片会对包进行编序,数据接收方会对片进行排序,

  • 流量控制 (滑动窗口)

有可能通讯的两个对端,处理数据的能力不同,接收数据的速度可能比发送数据的速度慢,于是TCP的应答报文里,会告诉对方,我只能接收多少个字节,别太快我受不了

  • 全双工

通讯两个对端,可以同时往对方发送,也可以同时接收

2.6 TCP的三次握手

客户端调用 connect方法,与服务器建立连接的过程、
SYN 报文的一个标志位,seq:序列号,ACK也是标志位
客户端发送一个SYN=1,seq=234112 的报文给服务端,客户端进入SYN_SENT状态,等待服务端应答
服务端发送应答报文 SYN=1,ACK=1,ack=23412+1 ,seq=6478 通过小写的ack 告诉客户端 我收到了你的SYN报文,现在我给你一个应答,服务端进入 SYN_RCVD状态
客户端收到应答报文,检查 ACK是否等于1.ack是否为234112+1,检查通过后客户端会给服务端应答ACK=1,ack=6478+1,客户端进入ESTABLISHED状态连接建立状态
服务端收到客户端的ACK应答报文 服务端进入ESTABLISHED,三次完成,可以进行数据传输

为什么需要三次握手?
TCP是面对连接的,所以需要双方都确认连接的建立,确认双方的收发能力,因为在传输数据的时候,用到了seq序列号,确保数据的顺序,所以,必须确认双方的seq,正好三次握手是确认双方seq的最小次数

image.png

TCP中的四次挥手(分手)
断开一个TCP连接时,需要客户端和服务端总共发送四个包以确认连接的断开。
过程:
第一次挥手:客户端发送关闭请求
第二次挥手:服务端响应客户端关闭请求
第三次挥手:服务端发送关闭请求
第四次挥手:客户端发送关闭确认请求

image.png

客户端主动关闭调用close方法,发送 FIN=1 seq=98745报文给服务端,客户端进入 FIN_WAIT_1状态,表示客户端不再向服务端发送数据,但是可以接收服务端的数据
服务端发送 ACK=1 ack=98745+1应答客户端,服务器进入 CLOSE_WAIT状态
客户端收到应答报文后进入,FIN_WAIT2状态
当服务端向客户端发送数据发送完成之后,再向客户端发送一个报文 FIN= 1 seq=76432发生了变化的seq,服务端进入CLOSE状态
客户端收到服务端的FIN报文后,客户端进入TIME_WAITING状态 ,客户端发送应答ACK=1,ack=76432+1的应答报文
服务端收到客户端的应答报文后进入CLOSED状态,服务端完全关闭不再接收也不再发送,客户端需要维持TIME_WAITING一段时间 持续2*MSL之后 进入到CLOSED状态
MSL:最长报文段寿命(存活的最长时间 RFC文档中定义 2 分钟,大部分操作系统,真正实际时间30s)实际TIME——WAITING 1-4分钟

image.png
四次分手的报文有可能会合并发送,当客户端发送关闭请求的时候,此时 服务端没有数据需要发送给客户端,他的应答报文和FIN报文可能会合并发送,

为什么需要四次挥手?
TCP是全双工(即客户端和服务端可以相互发送和接收请求)所以需要双方都确认关闭连接
为什么需要TIME_WAIT状态?
客户端的最后一次应答报文可能在网络传输中会丢失,所以客户端还得进行一次重传,确保可靠的终止TCP/IP
保证迟来的TCP报文有足够的时间,被识别并丢弃

3、网络工具 WireShark TCPDump

抓包工具
捕获过滤器 显示过滤器
BPF 语法
表达式: 原语(限定词<id 名字 数字>) 组合 原语(限定词<id 名字 数字>)
dst host 192.168.0.10 && tcp port 80 捕获的数据 目的主机地址是192.168.0.10 协议是tcp 端口号是80
原语 dst host 192.168.0.10,tcp port 80 两个原语用&&进行连接

dst(DIR限定词 制定传输方向)host(Type限定词 指定后边数字的意义) tcp(协议限定词)port(Type限定词) 80

BPF 还可以限定某个位置的报文是多少 TCP[13]&4=4 捕获报文的第十三个字节的第四位等于四的所有报文

显示过滤器
!udp and ip.addr=101.89.18.167 //显示非UDP的,ip地址为101.89.18.167的报文

3.1、WireShark 看看TCP的三次握手

image.png
第一个报文解析:
源IP:192.168.1.60 发起http请求的客户端的地址,
目的IP:192.168.1.226 http的服务端的地址

image.png

第二个报文解析
目的IP:192.168.1.60 发起http请求的客户端的地址,
源IP:192.168.1.226 http的服务端的地址

image.png

第三个报文解析
源IP:192.168.1.60 发起http请求的客户端的地址,
目的IP:192.168.1.226 http的服务端的地址

image.png

4、一次完整的http请求的过程

  1. DNS域名解析(本地浏览器缓存,操作系统缓存或者DNS服务器)
  2. 三次握手建立TCP连接
  3. 客户端发起HTTP请求
  4. 服务器响应HTTP请求
  5. 客户端解析html代码,并请求HTML代码中的资源
  6. 客户端渲染展示内容
  7. 关闭TCP连接

1.0 连接不可以复用 2.0IO多路复用,一次TCP连接可以进行多次http请求

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享