当前位置:   article > 正文

OSI七层模型,报文数据包帧详解,tcp三次握手与四次挥手说明,WireShark抓包分析_osi七层网络

osi七层网络

目录

浅谈OSI参考模型(七层模型)

什么是OSI参考模型

OSI参考模型的划分

OSI模型与TCP/IP模型的比较

七层详解

工作流程

TCP/IP协议栈

简介

通用协议栈描述

报文、数据报、报文段、数据包、帧的概念 

tcp三次握手与四次挥手说明

tcp的seq代表什么

背景描述与说明

WireShark抓包分析


浅谈OSI参考模型(七层模型)

参考文章:OSI七层模型基础知识及各层常见应用_WANGZHEN`的博客-CSDN博客
参考文章:OSI七层模型详解_小鹏_加油的博客-CSDN博客

什么是OSI参考模型

OSI(Open System Interconnect),即开放式互联,是ISO(国际标准化组织)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。

OSI参考模型的划分

OSI为网络开放系统定义了七层结构

层数OSI参考模型各层解释
第七层应用层为网络应用程序提供服务,计算机:应用程序,如FTP,SMTP,HTTP
第六层表示层处理数据格式和数据加密,计算机:编码方式,图像编解码、URL字段传输编码
第五层会话层建立、维护、管理会话,计算机:建立会话,SESSION认证、断点续传
第四层传输层建立主机端到端的连接,计算机:进程和端口
第三层网络层寻址和路由选择,网络:路由器,防火墙、多层交换机
第二层数据链路层提供介质访问和链路管理,网络:网卡,网桥,交换机
第一层物理层比特流传输,网络:中继器,集线器、网线、HUB

 OSI参考模型并没有提供一个可以实现的方法,而是描述了一些概念,用来协调进程间通信标准的制定。即OSI参考模型并不是一个标准,而是一个在制定标准时所使用的概念性框架。

OSI模型与TCP/IP模型的比较

TCP/IP模型实际上是OSI模型的一个浓缩版本,它只有四个层次:

  1.应用层

  2.运输层

  3.网际层

  4.网络接口层

  与OSI功能相比:

  应用层对应着OSI的 应用层 表示层 会话层

  运输层对应着OSI的传输层

  网际层对应着OSI的网络层

       网络接口层对应着OSI的数据链路层和物理层

Socket说明:
这不是一个协议,而是一个通信模型。其实它最初是伯克利加州分校软件研究所,简称BSD发明的,主要用来一台电脑的两个进程间通信,然后把它用到了两台电脑的进程间通信。所以,可以把它简单理解为进程间通信,不是什么高级的东西。主要做的事情不就是:

A发包:发请求包给某个已经绑定的端口(所以我们经常会访问这样的地址182.13.15.16:1235,1235就是端口);收到B的允许;然后正式发送;发送完了,告诉B要断开链接;收到断开允许,马上断开,然后发送已经断开信息给B。

B收包:绑定端口和IP;然后在这个端口监听;接收到A的请求,发允许给A,并做好接收准备,主要就是清理缓存等待接收新数据;然后正式接收;接受到断开请求,允许断开;确认断开后,继续监听其它请求。

可见,Socket其实就是I/O操作。Socket并不仅限于网络通信。在网络通信中,它涵盖了网络层、传输层、会话层、表示层、应用层——其实这都不需要记,因为Socket通信时候用到了IP和端口,仅这两个就表明了它用到了网络层和传输层;而且它无视多台电脑通信的系统差别,所以它涉及了表示层;一般Socket都是基于一个应用程序的,所以会涉及到会话层和应用层。

七层详解

1.物理层

物理层(physical layer):利用传输介质实现比特序列的传输。

物理层是传输的媒介,在线路中将0/1转换成电信号和光信号;就相当于是邮局与邮局之间的搬运工。

2.数据链路层

数据链路层(data link layer):采用差错控制与流量控制的方法,使得有差错的物理线路变成无差错的数据链路。

数据链路层,又称数链层;相互直连的设备之间需要使用地址实现物理传输,而这个地址就是MAC地址,也叫物理地址(注:任何一个网络设备都有一个唯一的身份识别码,这个识别码就是MAC地址,MAC地址是一串十六进制的12位数字编码);相当于邮局中的拆箱工人。

3.网络层

网络层(network layer):实现路由选择、分组、转发与拥塞控制等功能,为“分组”传输选择“最佳”的路由。

网络层的作用是寻址(ip地址就在网络层),将数据从发送端主机发送到接收端主机时,虽然两端主机之间有众多数据链路,但能够将数据准确地从发送端主机发送到接收端主机都是网络层的功劳;相当于邮局中集散中心的分拨排序工人,例如:邮件从沈阳发到上海,邮件先到沈阳集散中心,再到北京集散中心,再到上海集散中心;每个集散中心都可以看成一个ip地址。

4.传输层

传输层(transport layer):向高层用户提供可靠的“点---点”的通信服务,向高层屏蔽下层数据通讯的据体细节

传输层的一个重要作用是保证数据传输的可靠性,用于将建立和断开连接的实际行动,传输层为确保所有数据到达目标地址,会在通信两端计算机之间进行确认,如果数据没有到达或已损坏会负责进行重发;相当于公司中跑邮局的送信工人。

5.会话层

会话层(session layer):两个通信计算机之间的进程通信,管理数据交换。

会话层属于传输层的领导,决定采用何种连接方法以保证两端进行高效的数据交换是会话层的主要责任,管理传输层什么时间建立连接,什么时间断开连接;相当于公司中收寄信、写信封拆信封的秘书。

6.表示层

表示层(presentation layer):处理两个通信的计算机系统的数据表示方式,完成数据格式的变换,加密与解密,压缩与恢复

表示层是进行“统一的网络数据格式”和“某一台计算机或某一款软件特有的数据格式”之间的相互转换的分成;相当于替老板写信的助理(可以进行内容加密处理)。

7.应用层

应用层(application):为应用软件提供多种网络服务,例如:万维网,文件传输,电子邮件等其他服务

每一个网络应用都对应不同的协议,这些协议就属于应用层。

工作流程

数据在发送时由第七层至第一层依次封装,接收端在收到数据包后从第一层至第七层依次拆包,如图:

TCP/IP协议栈

简介

协议栈(英语:Protocol stack),又称协议堆叠,是计算机网络协议套件的一个具体的软件实现。协议套件中的一个协议通常是只为一个目的而设计的,这样可以使得设计更容易。因为每个协议模块通常都要和上下两个其他协议模块通信,它们通常可以想象成是协议栈中的层。最低级的协议总是描述与硬件的物理交互。每个高级的层次增加更多的特性。用户应用程序只是处理最上层的协议。(参见OSI模型
中文名:协议栈
解    释:网络中各层协议的总和
反映了:一个网络中文件传输的过程

在实际中,协议栈通常分为三个主要部分:媒体,传输和应用。一个特定的操作系统或平台往往有两个定义良好的软件接口:一个在媒体层与传输层之间,另一个在传输层和应用程序之间

媒体到传输接口定义了传输协议的软件怎样使用特定的媒体和硬件(“驱动程序”)。例如,此接口定义的TCP/IP传输软件怎么与以太网硬件对话。这些接口的例子包括Windows和DOS环境下的ODINDIS

应用到传输接口定义了应用程序如何利用传输层。例如,此接口定义一个网页浏览器程序怎样和TCP/IP传输软件对话。这些接口的例子包括Unix世界中的伯克利套接字和微软的Winsock。 [1] 

通用协议栈描述

想象一下,3台电脑: A,B,C。A和B 都有无线电设备,并可以通过合适的网络协议(如IEEE 802.11)通信。C和B通过电缆连接来交换数据(例如以太网。但是,不能用这两项协议直接在A和C之间传输信息,因为这些电脑在概念上是连接在不同的网络上的。因此,需要一个跨网络协议来连接它们。

你可以结合这两个网络来建立一个更强大的第三个网络协议,能够控制无线和有线传输。但是一个更简单的办法是不改变这两个协议并在这两个协议之上建立一个协议(例如IP)。这样就形成了两个协议栈。网间协议和基础协议通信,两个不同类型的基础协议不会直接通信。 

报文、数据报、报文段、数据包、帧的概念 

参考文章:https://www.cnblogs.com/jixp/articles/9528075.html
参考原文:https://blog.csdn.net/laoqiuge/article/details/53585935
参考文章:帧、报文、数据包的差别_报文和帧的区别_张兴军-w的博客-CSDN博客

报文(message)是网络中交换与传输的数据单元,也是网络传输的单元。报文包含了将要发送的完整的数据信息,其长短不需一致。报文在传输过程中会不断地封装成分组(tcp:报文段/udp:数据报)、包、帧来传输,封装的方式就是添加一些控制信息组成的首部,那些就是报文头。

应用层:报文(message),位于应用层的信息分组称为报文,一般指完整的信息。传输层实现报文交付;网络服务与最终用户的一个接口

协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP

表示层:数据的表示、安全、压缩。(在四层模型里面已经合并到了应用层)

格式有,JPEG、ASCll、DECOIC、加密格式等

会话层:建立、管理、终止会话。(在四层模型里面已经合并到了应用层)

对应主机进程,指本地主机与远程主机正在进行的会话

传输层:报文段(segment) / 数据报(datagram),定义传输数据的协议端口号,以及流控和差错校验。

协议有:TCP(segment) UDP(datagram)

网络层:包(packet)是网络传输中的二进制格式单元,数据包(datapacket)是TCP/IP通信协议传输中的数据单位;通过网络传输的数据基本单元,包含一个报头和数据本身,其中报头描述了数据的目的地及其与其他数据之间的关系,进行逻辑地址寻址,实现不同网络之间的路径选择。

协议有:ICMP IGMP IP(IPV4 IPV6)

链路层:帧(frame),数据链路层的协议数据单元,为了保证数据的可靠传输,把用户数据封装成帧;建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)

将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。

物理层:PDU(bit),协议数据单元;建立、维护、断开物理连接。(由底层网络定义协议)

TCP/IP 层级模型结构:应用层之间的协议通过逐级调用传输层(Transport layer)、网络层(Network Layer)和物理数据链路层(Physical Data Link)而可以实现应用层的应用程序通信互联。

应用层需要关心应用程序的逻辑细节,而不是数据在网络中的传输活动。应用层其下三层则处理真正的通信细节。在 Internet 整个发展过程中的所有思想和着重点都以一种称为 RFC(Request For Comments)的文档格式存在。针对每一种特定的 TCP/IP 应用,有相应的 RFC文档。

一些典型的 TCP/IP 应用有 FTP、Telnet、SMTP、SNTP、REXEC、TFTP、LPD、SNMP、NFS、INETD 等。RFC 使一些基本相同的 TCP/IP 应用程序实现了标准化,从而使得不同厂家开发的应用程序可以互相通信

抓包,抓到的是传输层的包,frame/packet/Datagram/segment是存在于同条记录中的,这些是基于所在协议层的不同取了不同的名字。

frame对应mac,packet对应ip,datagram对应udp,segment对应tcp,message对应app。

 --------------------------------------------------------------------------------------------------------------------------------

报文(message)—— 应用层
是网络中交换与传输的数据单元(站点一次性要发送的数据块)。报文包含了将要发送的完整的数据信息,其长短不一致。
报文在传输过程中会不断的封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的首部(报文头)
由传输层实现报文交付。

分组:为了提供通信性能和可靠性,每个用户发送的数据会被分成多个更小的部分。在每个部分的前面加上一些必要的控制信息组成的首部,有时也会加上尾部,就构成了一个分组。

报文段(segment)—— 传输层
组成报文的每个分组,将传输层分组称为报文段(面向连接(TCP)的数据传输)。
指起始点和目的地都是传输层的信息单元。
数据报(Datagram)—— 传输层
面向无连接(UDP)的数据传输:工作过程类似于报文交换,采用数据报方式传输时,被传输的分组就是数据报。
数据包(packet)—— 网络层
是网络层传输的数据单元,也成为“包”。
包中带有足够寻址信息(IP地址),可独立地从源主机传输到目的主机。
帧 (frame)—— 数据链路层
是数据链路层的传输单元。
将上层传输的数据添加一个头部和尾部,组成了帧。

根据此图再理解由PC4发送文件数据时每层的封装过程:

传输层:报文被分为多个报文段,每个报文段加上TCP首部(主要包含端口、源端口),变为TCP报文段
网络层:将TCP报文段加上IP数据包首部(主要包含目的IP,源IP),变成数据包;
数据链路层:将数据包加上目标MAC与源MAC、FCS、变成MAC帧。
物理层:将帧变为比特流,传递给PC3物理层。
原文链接:https://blog.csdn.net/weixin_50924373/article/details/123211601

--------------------------------------------------------------------------------------------------------------------------------

在学习计算机网络时,我们经常会遇到帧、数据包、数据报等名词?有人会问,他们不是都一样的吗,不是都是在网络传输的数据概念吗?其实它们三个还真不一样。那我们赶紧看一下他们之间的区别和联系。
      我们首先从概念上来区分他们:

      数据帧(Frame):就是数据链路层的协议数据单元,它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如ip数据包。    

      数据包(Packet):TCP/IP协议通信传输中的数据单位,处于网络层,在局域网中,“包”是包含在“帧”里的。

      数据报(Datagram):多用于网络层以上,面向无连接的数据传输,工作过程类似于报文交换。采用数据报方式传输时,被传输的分组称为数据报。

      有人说,局域网中传输的不是“帧”(Frame)吗?没错,但是TCP/IP协议是工作在OSI模型第三层(网络层)、第四层(传输层)上的,而帧是工作在第二层(数据链路层)。上一层的内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里的。 

      名词解释:OSI(Open System Interconnection,开放系统互联)模型是由国际标准化组织(ISO)定义的标准,它定义了一种分层体系结构,在其中的每一层定义了针对不同通信级别的协议。OSI模型有7层,1~7层分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。OSI模型在逻辑上可分为两个部分:低层的1~4层关注的是原始数据的传输;高层的5~7层关注的是网络下的应用程序。 我们可以用一个形象一些的例子对数据包的概念加以说明:我们在邮局邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时候只用产品原包装盒来包装显然是不行的。必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中只有一个数据包。

       那我们从体系结构上区分他们:
       一般说来,数据链路层发出的数据包称为frame,地址是链路层的地址,如mac地址;网络层发出的数据包称为packet,地址是网络层地址,如ip地址;传输层发出的数据包称为segment/datagram,地址是传输层地址,如TCP的端口号。

   下面的图片就很好解释了各个数据名词所对应的层次:

总而言之:

    二层的PDU叫做Frame;
    IP的叫做Packet;
    TCP的叫做Segment;
    UDP的叫做Datagram。

最后再补充一个知识点

数据包的帧封装原理:
    通过前面的学习我们就已经知道,网络层传输的包(packet,又称分组),在数据链路层中传输的是“帧”(frame)。数据包到达数据链路层后加上数据链路层的协议头和协议尾就构成了一个数据帧。在每个帧的前部加上一个帧头部,在帧的结尾处加上一个帧尾部,把网络层的数据包作为帧的数据部分,就构成了一个完整帧。帧头和帧尾就是作为帧的起始和结束标志,也就是帧边界,如图所示。
             
                                    
    由数据包封装成的数据帧其大小是受对应的数据链路层协议的MTU(最大传输单元)限制的,如以太网数据链路层封装网络层IP 包的MTU 值为1500 字节(这是指帧中数据部分,也就是来自网络层整个数据分组,最大不能超过1500 字节,但不包括帧头和帧尾部分)。同时,帧还有最小大小限制,如以太网帧中封装的IP 包最小值为46 字节,如果封装的IP 包小于最小帧要求时,就要用一些特殊字符进行填充,以满足对应链路中传输最小帧的限制。 

用通俗易懂的话解释就是:

    当数据数据链路层传播的时候通常叫“帧”,当一个帧被接收并交由第二层处理:剥开帧头帧尾,获得数据包(对于第二层来说它只认识帧头和帧尾,其它包括包头等都是帧承载的普通数据);完了这个包(packet)被交给第三层:它能识别包头,得到被包在里面的信息(这信息就包含第四层比如tcp数据报头,但对于第三层来说报头也只是它所承载的普通数据),第三层完事之后把去掉包头的数据给第四层,这坨数据就是数据报/报文段(英文datagram / segment),那么第四层就认得报头然后干该自己干的事了。   

转自http://m.blog.csdn.net/qq_25606103/article/details/51295965
原文链接:https://blog.csdn.net/bandaoyu/article/details/83312241 

tcp三次握手与四次挥手说明

参考文章:两张动图-彻底明白TCP的三次握手与四次挥手_tcp三次握手和4次挥手的过程_小书go的博客-CSDN博客
参考文章:TCP三次握手详解-深入浅出(有图实例演示)_jun2016425的博客-CSDN博客
参考文章:TCP的三次握手与四次挥手理解及面试题(很全面)_tcp三次握手_青柚_的博客-CSDN博客

tcp的seq代表什么

seq是序列号,这是为了连接以后传送数据用的,ack是对收到的数据包的确认,值是等待接收的数据包的序列号。
在第一次消息发送中,A随机选取一个序列号作为自己的初始序号发送给B;第二次消息B使用ack对A的数据包进行确认,因为已经收到了序列号为x的数据包,准备接收序列号为x+1的包,所以ack=x+1,同时B告诉A自己的初始序列号,就是seq=y;第三条消息A告诉B收到了B的确认消息并准备建立连接,A自己此条消息的序列号是x+1,所以seq=x+1,而ack=y+1是表示A正准备接收B序列号为y+1的数据包。
seq是数据包本身的序列号;ack是期望对方继续发送的那个数据包的序列号。

背景描述与说明

网络模型中的IP层,我们知道网络层,可以实现两个主机之间的通信。但是这并不具体,因为,真正进行通信的实体是在主机中的进程,是一个主机中的一个进程与另外一个主机中的一个进程在交换数据。IP协议虽然能把数据报文送到目的主机,但是并没有交付给主机的具体应用进程。而端到端的通信才应该是应用进程之间的通信。

UDP,在传送数据前不需要先建立连接,远地的主机在收到UDP报文后也不需要给出任何确认。虽然UDP不提供可靠交付,但是正是因为这样,省去和很多的开销,使得它的速度比较快,比如一些对实时性要求较高的服务,就常常使用的是UDP。对应的应用层的协议主要有 DNS,TFTP,DHCP,SNMP,NFS 等。

TCP,提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接。因此TCP是一种可靠的的运输服务,但是正因为这样,不可避免的增加了许多的开销,比如确认,流量控制等。对应的应用层的协议主要有 SMTP,TELNET,HTTP,FTP 等。

常用的熟知端口号
应用程序          FTP      TFTP    TELNET    SMTP    DNS    HTTP    SSH    MYSQL
熟知端口         21,20       69           23            25         53      80         22         3306
传输层协议       TCP     UDP        TCP         TCP     UDP      TCP     TCP     TCP
TCP的概述
TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字,例如,若IP地址为192.3.4.16 而端口号为80,那么得到的套接字为192.3.4.16:80。

    序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。例如,一段报文的序号字段值是 301 ,而携带的数据共有100字段,显然下一个报文段(如果还有的话)的数据序号应该从401开始;

    确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。例如,B收到了A发送过来的报文,其序列号字段是501,而数据长度是200字节,这表明B正确的收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701;

    确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效

    同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建立连接时才会被置1,握手完成后SYN标志位被置0。

    终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接

    PS:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。

 


三次握手过程理解

 

第一次握手:建立连接时,客户端发送SYN包(seq=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

四次挥手过程理解 


1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。 

 常见面试题
【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

【问题3】为什么不能用两次握手进行连接?

答:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

       现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发 送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S 是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分 组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。

【问题4】如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
————————————————
版权声明:本文为CSDN博主「青柚_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38950316/article/details/81087809

分析实例

WireShark抓包分析

参考文章:https://blog.csdn.net/zzwwhhpp/article/details/113077747
参考文章:https://blog.csdn.net/qq78069460/article/details/79153895
参考文章:WireShark抓包分析_hebbely的博客-CSDN博客

1> 封包详细信息

A. 第一行,帧Frame 36838 指的是要发送的数据块,其中,所抓帧的序号为36838,捕获字节数等于传送字节数:70字节;

B. 第二行,以太网,有线局域网技术,是数据链路层。源Mac地址为88:5d:90:00:00:25;目标Mac地址为00:25:22:b5:b9:92;

C. 第三行,IPV4协议,也称网际协议,是网络层;源IP地址为192.168.21.175;目标IP地址为192.168.21.156;

D. 第四行,TCP协议,也称传输控制协议,是传输层;源端口(10086);目标端口(50132);序列号(1361);ACK是TCP数据包首部中的确认标志,对已接收到的TCP报文进行确认,值为1表示确认号有效;长度为16(len>0,TCP首部PSH(PSH表示有DATA数据传输)标志一定为1);

E. 第五行,数据共有16字节

2> Frame信息分析

A. Arrival Time:到达时间,值为Jan 14, 2017 08:52:56.239204000

B. EPoch Time:信息出现时间,值为1484355176.239204000秒

C. [ Time delta from previous captured frame: 0.001472000 seconds] :与之前捕获的数据帧时间差:0.001472000秒;

     [Time delta from previous displayed frame: 0.001472000 seconds]:与之前显示的帧时间差: 0.001472000秒;

     [Time since reference or first frame: 1278.276505000 seconds]:距参考帧或第一帧的时间差:1278.276505000秒;

D. Frame Number: 36838,帧编号为36838;

E. Frame Length: 70 bytes (560 bits),帧长度为70字节;

     Capture Length: 70 bytes (560 bits),捕获到的长度为70字节;

F. [Frame is marked: False],帧标记:无;

     [Frame is ignored: False],帧被忽略:无;

G. [Protocols in frame: eth:ip:tcp:data],协议帧:eth(以太网)、IP、tcp、data

H. [Coloring Rule Name: TCP],色彩规则名称:TCP;

     [Coloring Rule String: tcp],色彩规则字符串:TCP;

3> EthernetⅡ信息分析

A. Destination: AsrockIn_b5:b9:92 (00:25:22:b5:b9:92),目标Mac地址为00:25:22:b5:b9:92

B. Source: 88:5d:90:00:00:25 (88:5d:90:00:00:25),源Mac地址为88:5d:90:00:00:25

C. Type: IP (0x0800),类型是IP数据包

4> IPv4 协议信息分析

A. Version: 4,IP协议版本为IPv4;

     Header length: 20 bytes,头部数据长度为20字节;

B. Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport)),区分的服务领域:0x00 (默认的是DSCP:0x00);

C. Flags: 0x02 (Don't Fragment),不支持分组;

     Fragment offset: 0,分组偏移量为0; 

D. Time to live: 64,TTL,生存时间为64,TTL通常表示包在被丢弃前最多能经过的路由器个数,当数据包传输到一个路由器之后,TTL就自动减1,如果减到0了还没有传送到目标主机,那么就自动丢失。

E. Header checksum: 0xcebd [correct],头部校验和

F. Source: 192.168.21.175 (192.168.21.175),源IP地址为192.168.21.175;

     Destination: 192.168.21.156 (192.168.21.156),目标IP地址为192.168.21.156;

5> Trasmission Control Protocol信息分析

其中,对应的TCP首部的数据信息

A. 端口号,数据传输的16位源端口号和16位目标端口号(用于寻找发端和收端应用进程);

B. 相对序列号,该数据包的相对序列号为1361(此序列号用来确定传送数据的正确位置,且序列号用来侦测丢失的包);下一个数据包的序列号是1377;

C. Acknowledgment number是32位确认序列号,值等于1表示数据包收到,确认有效;

D. 手动的数据包的头字节长度是20字节;

E. Flags,含6种标志;ACK:确认序号有效;SYN:同步序号用来发起一个连接;FIN:发端完成发送任务;RST:重新连接;PSH:接收方应该尽快将这个报文段交给应用层;URG:紧急指针(urgentpointer)有效;

F. window,TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个16bit字段,因而窗口大小最大为65536字节,上面显示窗口大小为1825字节;

G. Checksum,16位校验和,检验和覆盖了整个的TCP报文段,由发端计算和存储,并由收端进行验证;

6> Data信息分析
​​​​​​​ 

A.  TCP 报文段中的数据(该部分是可选的),长度为16字节

实例1:

# iptables -F 
# systemctl stop firewalld

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/1006718
推荐阅读
相关标签
  

闽ICP备14008679号