澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

TCP连接的握手和挥手,输入到页面展现发生了什

2019-08-03 作者:澳门新萄京官方网站   |   浏览(175)

 

1、基础

标签(空格分隔): wireshark数据包分析过程 DNS解析 TCP三次握手

TCP协议学习总结,tcp协议总结

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:


 

1.传输全双工通信,即 一个链接 双向通信 互不影响

2.在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.

  含义是:

  SYN表示建立连接,

  FIN表示关闭连接,

  ACK表示响应,

  PSH表示有 DATA数据传输,

  RST表示连接重置。

3.TCP建立链接需要三次握手:

 

澳门新萄京官方网站 1

  

  1). C -> S  标志位:SYN = 1 , ACK = 0 ,随机序列号:seq:10000 

  (如何理解:客户端C 自己随机一个序列号seq发送给服务端 ;发送标识 SYN = 1 & ACK = 0 表示要求建立链接)

  发送报文:SYN=1,ACK=0,SEQ=10000 

澳门新萄京官方网站 2

 

  2). S -> C  标志位:SYN = 1 , ACK = 1 ,随机序列号:seq:20000,ack:10000 1

   (如何理解:服务端S 接到 SYN = 1 & ACK = 0 标识的报文后, 自己随机一个序列号seq,并将客户端的seq 1 作为ack发送给客户端 ;发送 标识 SYN = 1 & ACK = 1 表示已收到新链接请求,请继续握手)

  发送报文:SYN=1,ACK=1,SEQ=20000,ack=10001

 

澳门新萄京官方网站 3

 

  3). C -> S 标志位:SYN = 0 , ACK = 1 ,序列号:seq:10001,ack:2000 1

  (如何理解:客户端C 接到 SYN = 1 & ACK = 1 标识的报文后, 检查收到ack是不是等于自己第一发送的seq 1,如果正确则将服务端的seq 1 作为ack发送给客户端 ;发送 标识 SYN = 0 & ACK = 1 表示客户端已与服务端确认链接,此时链接成功,可以传输数据。)

 

 澳门新萄京官方网站 4

 

 

 

  内容参考引用:

    

    

  PS1:

 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。  第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;  第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j 1),同时自己也发送一个SYN包(syn=k),即SYN ACK包,此时服务 器进入SYN_RECV状态;

 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k 1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据

 

PS2:

 

三次握手Three-way Handshake

一个虚拟连接的建立是通过三次握手来实现的

  1. (B) --> [SYN] --> (A)

假如服务器A和客户机B通讯. 当A要和B通信时,B首先向A发一个SYN (Synchronize) 标记的包,告诉A请求建立连接.

注意: 一个 SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources). 认识到这点很重要,只有当A受到B发来的SYN包,才可建立连接,除此之外别无他法。因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不 能让外部任何主机主动建立连接。

  1. (B) <-- [SYN/ACK] <--(A)

接着,A收到后会发一个对SYN包的确认包(SYN/ACK)回去,表示对第一个SYN包的确认,并继续握手操作.

注意: SYN/ACK包是仅SYN 和 ACK 标记为1的包.

  1. (B) --> [ACK] --> (A)

B收到SYN/ACK 包,B发一个确认包(ACK),通知A连接已建立。至此,三次握手完成,一个TCP连接完成

Note: ACK包就是仅ACK 标记设为1的TCP包. 需要注意的是当三此握手完成、连接建立以后,TCP连接的每个包都会设置ACK位

这就是为何连接跟踪很重要的原因了. 没有连接跟踪,防火墙将无法判断收到的ACK包是否属于一个已经建立的连接.一般的包过滤(Ipchains)收到ACK包时,会让它通过(这绝对不是个 好主意). 而当状态型防火墙收到此种包时,它会先在连接表中查找是否属于哪个已建连接,否则丢弃该包

四次握手Four-way Handshake

四次握手用来关闭已建立的TCP连接

  1. (B) --> ACK/FIN --> (A)

  2. (B) <-- ACK <-- (A)

  3. (B) <-- ACK/FIN <-- (A)

  4. (B) --> ACK --> (A)

注意: 由于TCP连接是双向连接, 因此关闭连接需要在两个方向上做。ACK/FIN 包(ACK 和FIN 标记设为1)通常被认为是FIN(终结)包.然而, 由于连接还没有关闭, FIN包总是打上ACK标记. 没有ACK标记而仅有FIN标记的包不是合法的包,并且通常被认为是恶意的

连接复位Resetting a connection

四次握手不是关闭TCP连接的唯一方法. 有时,如果主机需要尽快关闭连接(或连接超时,端口或主机不可达),RST (Reset)包将被发送. 注意在,由于RST包不是TCP连接中的必须部分, 可以只发送RST包(即不带ACK标记). 但在正常的TCP连接中RST包可以带ACK确认标记

请注意RST包是可以不要收到方确认的?

无效的TCP标记Invalid TCP Flags

到目前为止,你已经看到了 SYN, ACK, FIN, 和RST 标记. 另外,还有PSH (Push) 和URG (Urgent)标记.

最常见的非法组合是SYN/FIN 包. 注意:由于 SYN包是用来初始化连接的, 它不可能和 FIN和RST标记一起出现. 这也是一个恶意攻击.

由于现在大多数防火墙已知 SYN/FIN 包, 别的一些组合,例如SYN/FIN/PSH, SYN/FIN/RST, SYN/FIN/RST/PSH。很明显,当网络中出现这种包时,很你的网络肯定受到攻击了。

别的已知的非法包有FIN (无ACK标记)和"NULL"包。如同早先讨论的,由于ACK/FIN包的出现是为了关闭一个TCP连接,那么正常的FIN包总是带有 ACK 标记。"NULL"包就是没有任何TCP标记的包(URG,ACK,PSH,RST,SYN,FIN都为0)。

到目前为止,正常的网络活动下,TCP协议栈不可能产生带有上面提到的任何一种标记组合的TCP包。当你发现这些不正常的包时,肯定有人对你的网络不怀好意。

 

PS3: 数据传输阶段:

序号  方向    seq   ack             size
23   A->B   40000   70000           1514
24   B->A   70000   40000 1514-54=41460   54
25   A->B   41460   70000 54-54=70000   1514
26   B->A   70000   41460 1514-54=42920   54
解释:
23:B接收到A发来的seq=40000,ack=70000,size=1514的数据包
24:于是B向A也发一个数据包,告诉B,你的上个包我收到了。B的seq就以它收到的数据包的ACK填充,ACK是它收到的数据包的SEQ加上数据包的大小(不包括以太网协议头,IP头,TCP头),以证实B发过来的数据全收到了。
25:A在收到B发过来的ack为41460的数据包时,一看到41460,正好是它的上个数据包的seq加上包的大小,就明白,上次发送的数据包已安全 到达。于是它再发一个数据包给B。这个正在发送的数据包的seq也以它收到的数据包的ACK填充,ACK就以它收到的数据包的seq(70000)加上包 的size(54)填充,即ack=70000 54-54(全是头长,没数据项)。

其实在握手和结束时确认号应该是对方序列号加1,传输数据时则是对方序列号加上对方携带应用层数据的长度.如果从以太网包返回来计算所加的长度,就嫌走弯路了.
另外,如果对方没有数据过来,则自己的确认号不变,序列号为上次的序列号加上本次应用层数据发送长度.

 

参考页面:

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://...

基本概念

URL(Uniform Resource Location)统一资源定位符 : 俗称网页地址, 是因特网上标准的资源地址(Address), 用于定位互联网上的资源。

IP(Internet Protocol) : 网络之间互联的协议, 链接互联网的每一台设备都有且只有一个IP地址,用来标识自己。

DNS(Domain Name System): 因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。

前言

Internet最早来源于美国国防部ARPANet,1969年投入运行,到现在已有很长一段路了,各位想要了解发展史可以百度下,这里就不多说了。

现如今当我们想要获取一些资料,首先是打开某个浏览器,在地址栏输入地址,想要的信息出现在你的面前。

大家有没有想过输入地址就能返回给你想要的信息是怎么实现的呢?

下面就来简单说下它的实现流程,不过在这之前先来了解下HTTP基本概念如下

1.1 概述-网络编程原型

网络编程的基本模式就是Client-Server模型,两个进程进行通信,由服务端提供位置信息,包括绑定的ip地址和监听端口,客户端通过链接操作向服务端监听的地址发起连接请求,通过三次握手建立连接,如果连接成功,双方就可以通过网络套接字(sockt)进行通信

题外话:正值白色情人节,她说,暖壶瓶里的热气,发出撕心裂肺的呻吟,刺耳却充满期待,打开瓶塞的时候,便像彩虹一样飘荡在天空,一霎那的热气扑鼻,你满怀欣喜,转瞬间,她便也消失得无影无踪,沸腾的热水,慢慢等待着衰老,等待着凋零。

从URL输入到页面展示的过程

HTTP基本概念

1.2 TCP报文格式

TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图:

澳门新萄京官方网站 5

图1-tcp报文格式

      上图中有几个字段需要重点介绍下:

        (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

        (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq 1。

        (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:

                (A)URG:紧急指针(urgent pointer)有效。

                (B)ACK:确认序号有效。

                (C)PSH:接收方应该尽快将这个报文交给应用层。

                (D)RST:重置连接。

                (E)SYN:发起一个新连接。

                (F)FIN:释放一个连接。

背景:近期打算求职,于是便闷头闷脑的收集各类知识点,恰巧看到一篇讲解通过实例学习tcpdump命令,就引申出这些相关知识。

1、输入地址

当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能的 URL了,他会从历史记录、书签等地方,找到已经输入的字符串可能对应的 URL,然后给出智能提示,让你可以补全URL地址。对于 chrome 浏览器,他甚至会直接从缓存中把网页展示出来,就是说,你还没有按下 enter,页面就出来了。

在这引用http://www.zsythink.net/archives/76

这是一篇为初学者准备的文章,所以作者会尽量从基础出发,尽量细致的描述每一个细节,以求让初学者不会一头雾水,有一定基础的同学就不用看了,以免浪费你的时间。

 

假设博主今天春心荡漾,想要访问一些不可描述的小网站,于是,博主悄悄的打开了浏览器,在浏览器的地址栏中输入了一个小网站的网址,

此处假设这个小网站的网址为 www.zsythink.net ,当博主输入了这个网址以后,浏览器中就显示了博主想要看到的内容,整个过程如下图所示。

   澳门新萄京官方网站 6

2-三次连接原理

一.tcpdump命令

1.从指定的网卡bond0中捕获数据包
tupdump -i bond0
2.将捕获的包写入文件
tupdump -i bond0 -w packets_file
3.读取之前产生的tcpdump文件
tupdump -r packets_file
4.查看源地址192.168.1.110或者目标地址192.168.1.50,端口为22,写入到ssh_packets文件中
tcpdump src 192.168.1.110 or dst 192.168.1.50 && port 22 -w ssh_packets

具体详细实例请看tcpdump实用手册

2、浏览器查找域名的ip地址

浏览器的第一步是通过访问的域名找出其IP地址,DNS查找过程如下:

  • 查询浏览器本身DNS缓存中是否有域名相关的信息
  • 查询本机的host文件中是否有域名相关的信息
  • 查询离本地最近的路由器中DNS的缓存中是否有域名相关的信息
  • 查询ISP(互联网服务提供商,例如电信,移动)中的DNS服务器中是否有目标域名的信息
  • 查询根域名服务器是否有目标域名的信息,如果没有,则传至子域名服务器进行查询, 以此递推,直到找到了IP地址为止。

那么,浏览器返回给我们的内容是怎么产生的呢?

这些内容肯定不是凭空产生的,而是有人为我们准备了这些内容,当我们在浏览器的地址栏中输入网址以后,

这些提前准备好的内容即可返回到浏览器中,以便有需要的人能够查看到这些内容,

而查看这些内容的人就是我们平常所说的"客户",客户往往会通过"客户端程序"去请求、查看这些内容,

我们最常使用的客户端程序就是浏览器了,所以,在之后的http相关的文章中,

如果没有特别说明,我们所说的"客户端"就是指"浏览器",我们使用客户端去查看我们想要的内容,

而提供内容的一端被称为"服务端",当作为客户时,我们需要在电脑上安装客户端软件(即浏览器),

通过客户端软件查看我们想要的内容,而作为提供内容的人,也需要在服务端的计算机上安装对应的软件,

才能为我们提供服务,而服务端的计算机就是我们常说的"服务器",安装在服务器上的、为我们提供内容的软件被称之为"web服务器软件"。

 

2.1 原理

澳门新萄京官方网站 7

2.1 三次握手

第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq 1),syn=1,ack=1,随机产生seq=7654321的包;

 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number 1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq 1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

 完成三次握手,主机A与主机B开始传送数据。

二.wireshark抓包分析

3、浏览器向 web 服务器发送一个 HTTP 请求

拿到域名对应的IP地址之后,浏览器会以一个随机端口(1024<端口<65535)向服务器的WEB程序(常用的有httpd,nginx等)80端口发起TCP的连接请求。这个连接请求到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终到达WEB程序,最终建立了TCP/IP的连接。

建立了TCP连接之后,发起一个http请求。一个典型的 http request header 一般需要包括请求的方法,例如 GET 或者 POST 等,不常用的还有 PUT 和 DELETE 、HEAD、OPTION以及 TRACE 方法,一般的浏览器只能发起 GET 或者 POST 请求。

所以,综上所述,我们可以了解到如下名词

注:如下名词的解释均针对http而言,在后面的文章中我们会解释什么是http,此处不用纠结

客户端:客户端通常是指浏览器,比如谷歌浏览器、火狐浏览器、IE等,浏览器安装在客户使用的电脑上,所以,在描述http时,客户端通常也代指那些安装了浏览器的电脑。

服务端:服务端通常是指那些安装了"web服务软件"的计算机,这些服务端的计算机被称为服务器。

 

没错,聪明如你一定想到了,说白了,客户端与服务端就是两台电脑,分别安装了不同的软件,服务端提供内容,客户端查看内容。澳门新萄京官方网站 8

 

所以,当我们访问网页时,大致的过程如下图所示。

 

澳门新萄京官方网站 9

 

客户端与服务端既然能够通讯,那么证明它们之间一定是通过某种方法进行沟通的,就像你我之间能够进行沟通一样。

2.2 为什么是三次?

本质:信道不可靠, 但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值.

举例:client发送的syn消息出现延迟,而已经有新的syn到达

1.过滤出dns信息

DNS服务器不设转发
在DNS服务器上安装上wireshark软件,并打开它,设置数据包为UDP过滤,在客户机上用nslookup命令查询一下[http://www.sohu.com/],马上可以看到本地DNS服务器直接查全球13台根域中的某几台,然后一步步解析,通过递代的方式,直到找到www .sohu .com对应的IP为220.181.118.87。
具体过程有待明天验证。

澳门新萄京官方网站 10

dns.png

拓展知识

1)TCP三次握手

第一次握手:客户端将标志位SYN置为1,随机产生一个值为seq=J的数据包到服务器,客户端进入SYN_SENT状态,等待服务端确认;

第二次握手:服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务端将标志位SYN和ACK都置为1,ack=J 1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务端进入SYN_RCVD状态。

第三次握手:客户端收到确认后,检查ack是否为J 1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K 1,并将该数据包发送给服务端,服务端检查ack是否为K 1,ACK是否为1,如果正确则连接建立成功,客户端和服务端进入ESTABLISHED状态,完成三次握手,随后客户端与服务端之间可以开始传输数据了。

2)为什需要三次握手?

《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。

书中的例子是这样的,“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。

假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”。主要目的防止server端一直等待,浪费资源。

3)TCP四次挥手

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号 1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号 1,Server进入CLOSED状态,完成四次挥手。

4)为什么建立连接是三次握手,而关闭连接却是四次挥手呢?

这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

举例说明

你和我都说汉语,所以,当我说"苹果"这个词的时候,你就会想到一种水果,或者想到一个手机品牌,

但是当我对一个美国人说"苹果"两个字时,他可能并不能理解我在说什么,因为他可能听不懂汉语,

如果我想要对他表达"苹果"这个词,我需要说"Apple",他才会明白我说的是什么,当我跟你聊天时,我们都说汉语,

当两个美国人聊天时,他们都说英语,这样,才能有效的沟通,总之,如果想要能够顺畅的沟通,

沟通双方都必须遵守相同的协议,我们可以把汉语理解成一种协议,把英语也理解成一种协议,

只要沟通双方都遵守相同的协议,双方就能够顺畅的沟通,只要沟通双方都遵守相同的协议,双方就能够理解对方想要做什么。

当然,之所以拿汉语、英语举例,是为了让初学者能够更加容易的理解"协议"这个词,但是请不要错误的以为"协议"就是"语言",

之所以拿语言举例,是为了方便理解,说白了,"协议"可以理解为某种规则或者某种约定,

只要大家都严格按照这种约定行事,世界就会正常的运转,比如"红灯停,绿灯行"也可以理解为一种协议,

比如在马路上都要靠右行驶(在中国),也是一种协议,比如在小饭馆,你给老板人民币,老板给你对应的餐食,

也是一种协议,"协议"的概念稍微有一些抽象,稍微有一些宽泛,此处大概有一个印象即可,在学习的过程中,我们自己就会慢慢的理解它了。

 

客户端与服务端之间,也需要遵守某些相同的协议,才能够顺畅的通讯,细心如你一定注意到了,我说的是"某些"协议,也就是说,双方要遵守的协议不止有一种,它们需要同时遵守多种协议,才能够正常的完成整个通讯过程。

 

比如http协议,刚才已经说过,不同的"层面"中,需要使用不同的协议,http协议就是应用层的一种协议,http协议是什么意思呢?

http是HyperText Transfer Protocol的缩写,HyperText Transfer Protocol译为"超文本传输协议"。

从字面上理解,这种协议是用来传输"超文本"的,我们可以暂且粗暴的将"超文本"理解成我们所谓的"网页"(这样并不准确,但是方便理解),那么,我们可以将http协议理解为一种"网页传输协议"。

4-四次挥手原理

2.过滤出tcp包分析:

在显示过滤框输入:ip.dst==180.97.33.108 or ip.src==180.97.33.108

澳门新萄京官方网站 11

摘录图片-个人学习使用.png

4、服务器的永久重定向响应

服务器给浏览器响应一个301永久重定向响应,这样浏览器就会访问“http://www.facebook.com/” 而非"http://facebook.com/" 。

为什么服务器一定要重定向而不是直接发会用户想看的网页内容呢?

其中一个原因跟搜索引擎排名有 关。你看,如果一个页面有两个地址,就像"http://www.igoro.com/" 和"http://igoro.com/", 搜索引擎会认为它们是两个网站,结果造成每一个的搜索链接都减少从而降低排名。而搜索引擎知道301永久重定向是 什么意思,这样就会把访问带www的和不带www的地址归到同一个网站排名下。

还有一个是用不同的地址会造成缓存友好性变差。当一个页面有好几个名字时,它可能会在缓存里出现好几次。

一次完整的HTTP请求过程

4.1 原理

澳门新萄京官方网站 12

4.1 四次挥手示意图

1、当主机A确认发送完数据且知道B已经接受完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FIN给主机B。

2、主机B收到A发送的FIN,表示收到了,就会发送ACK回复。

3、但这是B可能还在发送数据,没有想要关闭数据口的意思,所以FIN与ACK不是同时发送的,而是等到B数据发送完了,才会发送FIN给主机A。

4、A收到B发来的FIN,知道B的数据也发送完了,回复ACK, A等待2MSL以后,没有收到B传来的任何消息,知道B已经收到自己的ACK了,A就关闭链接,B也关闭链接了。

A为什么等待2MSL,从TIME_WAIT到CLOSE?

 在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连接。

TCP通信流程大致如下:

客户端和服务器之间TCP三次握手(4941、4942、4943帧)—->客户端请求的GET主页面(4944帧)—>服务器收到请求(4945帧)—>发送响应包(4946帧)。

说明:

  • 客户端向服务器发送TCP请求建立连接。标识为SYN。

  • 服务器得到请求后向客户端回应确认包的过程。标识为SYN,ACK。

  • 客户端回应服务器发送确认包的过程,将于服务器建立连接。标识为ACK。

  • 客户端向服务器发送HTTP请求内容的过程。标识为GET。

  • 服务器响应客户端请求的过程,收到请求。标识为ACK。

  • 4946帧帧是服务器向客户端回应内容的过程。

5、浏览器跟踪重定向地址

现在,浏览器知道了“http://www.facebook.com/” 才是要访问的正确地址,所以它会发送另一个获取请求。

web服务请求处理步骤

澳门新萄京官方网站 13

4.2为什么是四次?

这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

三.TCP三次握手以及四次挥手详解

澳门新萄京官方网站 14

一次连接的完整周期(图片来自网络).png

6、服务器处理请求

web server接受用户的请求,并返回代码。web server 担任管控的角色,对于不同用户发送的请求,会结合配置文件,把不同请求委托给服务器上处理对应请求的程序进行处理(例如CGI脚本,JSP脚本,servlets,ASP脚本,服务器端JavaScript,或者一些其它的服务器端技术等)。

HTTP服务通信过程

澳门新萄京官方网站 15

5、一个段子收尾

三次握手:

A:“喂,你听得到吗?”A->SYN_SEND

B:“我听得到呀,你听得到我吗?”应答与请求同时发出 B->SYN_RCVD | A->ESTABLISHED

A:“我能听到你,今天balabala……”B->ESTABLISHED

四次挥手:

A:“喂,我不说了。”A->FIN_WAIT1

B:“我知道了。等下,上一句还没说完。Balabala…..”B->CLOSE_WAIT | A->FIN_TCP连接的握手和挥手,输入到页面展现发生了什么。WAIT2

B:”好了,说完了,我也不说了。”B->LAST_ACK

A:”我知道了。”A->TIME_WAIT | B->CLOSED

A等待2MSL,保证B收到了消息,否则重说一次”我知道了”,A->CLOSED

1.三次握手

澳门新萄京官方网站 16

三次握手-图片源自网络,个人学习.png

(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=client_isn,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=client_isn 1,随机产生一个值seq=server_isn,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为server_isn 1,ACK是否为1,如果正确则将标志位ACK置为1,ack=server_isn 1,并将该数据包发送给Server,Server检查ack是否为server_isn 1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

7、服务器返回一个 HTTP 响应

经过前面6个步骤,服务器收到了我们的请求,也处理了我们的请求,到这一步,它会把它的处理结果返回,也就是返回一个HTTP响应。

人性化HTTP请求相应图

澳门新萄京官方网站 17

图片来自:理解Http请求与响应

实战(通过wireshark抓包,观察tcp三次握手情况)

澳门新萄京官方网站 18

wireshark三次握手.png

图片中有上一个tcp连接的关闭,涉及到四次握手,之后会提及,现在不作说明。

第一次握手:16088,客户端发送SYN=1,seq=0
第二次握手:16091,服务端发送SYN=1,ACK=1,ack(client的seq 1)=1,seq=0
第三次握手:16092,ACK=1,ack(server的seq 1)=1,seq(client的seq 1)=1

8、浏览器显示 HTML

在浏览器没有完整接受全部HTML文档时,它就已经开始显示页面了,浏览器是如何把页面呈现在屏幕上的呢?就是浏览器解析的一个过程,
对应就是html页面加载、解析、渲染的工作。

  1. 加载
    浏览器对一个html页面的加载顺序是从上而下的,并在加载过程并行进行解析渲染处理。在这个过程中遇到link标签、image标签、script标签时,浏览器会再次向服务器发送请求获取css文件、图片资源、js文件,并执行js代码,同步进行加载解析。
  2. 解析、渲染
    解析的过程,其实就是生成解析树,即dom树。dom树是由dom元素及属性节点组成,加上css解析的样式对象和js解析后的动作实现。而渲染,就是将DOM树进行可视化表示。
  3. 绘制网页
    浏览器通过上面步骤计算得到渲染树,是DOM树的可视化表示,构建渲染树使页面以正确的顺序绘制出来,遵循一定的渲染规则,经过一系列的渲染工作,实现网站页面的绘制,由此最终完成了页面展示。

大致如下

域名解析 --> TCP3次握手 --> 发起http请求 --> 服务器响应http请求并传输数据 –>  浏览器解析并渲染呈现给用户 –> TCP4次挥手

SYN攻击:

在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:
netstat -nap | grep SYN_RECV

9、浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSS、JS等等)

其实这个步骤可以并列在步骤8中,在浏览器显示HTML时,它会注意到需要获取其他地址内容的标签。这时,浏览器会发送一个获取请求来重新获得这些文件。比如我要获取外图片,CSS,JS文件等,类似于下面的链接:

图片:http://static.ak.fbcdn.net/rsrc.php/z12E0/hash/8q2anwu7.gif
CSS式样表:http://static.ak.fbcdn.net/rsrc.php/z448Z/hash/2plh8s4n.css
JavaScript 文件:http://static.ak.fbcdn.net/rsrc.php/zEMOA/hash/c8yzb6ub.js

这些地址都要经历一个和HTML读取类似的过程。所以浏览器会在DNS中查找这些域名,发送请求,重定向等等...

不像动态页面,静态文件会允许浏览器对其进行缓存。有的文件可能会不需要与服务器通讯,而从缓存中直接读取。服务器的响应中包含了静态文件保存的期限 信息,所以浏览器知道要把它们缓存多长时间。还有,每个响应都可能包含像版本号一样工作的ETag头(被请求变量的实体值),如果浏览器观察到文件的版本 ETag信息已经存在,就马上停止这个文件的传输。

域名解析

当用户在浏览器输入https://www.cnblogs.com/时,浏览器会对此域名或主机进行解析,得到对应的IP地址,那么它时怎么进行域名解析的呢?

1、首先先去本机hosts文件查找此FQDN没有没定义的指向所在的IP地址条目,如果找到,就结束解析

2、如果没有找到,回去浏览器器本身DNS缓存里去寻找,找打结束解析

3、没有找到,会去本机配置的首选DNS服务器查询,一般这是三大运营商提供的,通过UTP53端口发起请求,这个请求是递归查询,DNS服务器收到请求后,会查询自身缓存,找到条目并且没有过期,就返回给用户,结束解析。如果没有找到,它会去找根服务器,全球13个根服务器(根服务器地址本机DNS服务器内置),询问根服务器(你知不知道一个域名叫“www.cnblogs.com”的IP地址),根回复说,(我不知道此域名的IP地址,但我知道com域的IP地址,你去询问它吧),于是运行商提供的DNS服务器就去询问com这个域,(你知不知道一个叫“www.cnblogs.com”域名IP地址),com域回答你说,(我不知道此域名的IP地址,但我知道“cnblogs.com域的IP地址,你去问他吧“),这是运行商DNS服务器,对cnblogs.com域发起请求询问,(你知不知道一个叫”www.cnblogs.com“域的IP地址,它一查,发现此域,就是它负责的,就会对你说,此域是我负责的,它的IP是X.X.X.X这时运行商DNS服务器拿到地址,就会返回客户主机内核,内核再返回给浏览器,到此解析结束,进行下一步。

当然这里面还要涉及到IP –> MAC(物理地址)的解析

2.四次挥手

澳门新萄京官方网站 19

tcp四次挥手(图片来自网络).png

(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号 1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号 1,Server进入CLOSED状态,完成四次挥手。
(5)Client端等待了2MSL(最大报文段生存时间)后,依然没有收到回复,则证明Server端已正常关闭,那好,Client端也可以关闭连接了。

【注意】 在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。

假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

参考资料

http://www.cnblogs.com/xianyulaodi/p/6547807.html
http://blog.csdn.net/wdzxl198/article/details/11265475
http://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html
http://www.cnblogs.com/zhaobw/p/6580241.html

TCP3次握手

浏览器拿到域名对应的IP后,会拿一个随机端口向WEB服务程序80端口发起TCP请求链接

澳门新萄京官方网站 20

实战(通过wireshark抓包,观察tcp四次挥手情况一)

澳门新萄京官方网站 21

wireshark四次挥手.png

【设想的】第0次挥手,client端发送[ACK],seq=136125,ack=192
第一次挥手,client端发送[FIN,ACK],seq=136125,ack=192
第二次挥手,server端发送[ACK],seq=193,ack(client的seq 1)=136126
第三次挥手,server端发送[FIN,ACK],seq=192(这个值的变化有待商榷),ack(client的seq 1)=136126
第四次挥手,client端发送[ACK],seq=136126(因为又一次携带了一个ack包,需要在最后确认关闭时, 1),ack(client的seq 1)=193
【备注】这里也可以观察端口的变化,定位到这四次挥手

还有一种情况和上述描述的四次挥手恰好不一样,属于实际中还会出现同时发起主动关闭的情况

澳门新萄京官方网站 22

四次挥手(图片来自网络).png

备注:

SYN(synchronous建立联机)

ACK(acknowledgement 确认)

PSH(push传送)

FIN(finish结束)

RST(reset重置)

URG(urgent紧急)

Sequence number(顺序号码)

Acknowledge number(确认号码)

实战(通过wireshark抓包,观察tcp四次挥手情况二)

澳门新萄京官方网站 23

image.png

seq是从开始(tcp三次握手)到最终结束(服务器响应结束)的值,ack是http响应结束的值,可以参见下图
第一次挥手,client端发送[FIN,ACK],seq=203346,ack=192
第二次挥手,server端发送[FIN,ACK],seq=192,ack=203346
第三次挥手,client端发送[ACK],seq=203347,ack=193,进入time_wait状态
第四次挥手,server端发送[ACK],seq=193,ack=203347,进入time_wait状态

举例

A : 你好我是A,你能听得到我说话吗?

B : 听到了,我是B,你能听到我说话吗?

A : 可以,听到了

好建立连接,开始聊天!

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

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

过程

第一次握手:建立连接,客户端将SYN标记为1,seq标记为x,并将SYN包发送到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到SYN,知道客户端要建立链接,同时向客户端也发送一个SYN包(SYN=1)和一个ACK包(ACK=1),随机产生一个数seq=y,ack=x 1(客户端的seq值x加1),来确认客户端的SYN,并进入SYN_RECV;

第三次握手:澳门新萄京官方网站,客户端收到服务器发来的SYN ACK后,确认ack值,并回复服务器端一个ACK确认,发送完毕后,双方进入ESTABLISHED状态。

三次握手成功后,开始传输数据。

一个完整的三次握手也就是 请求---应答---再次确认

链接建立成功后,就要开始下一步,传输数据

 

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

答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

HTTP请求相应处理

四.DNS解析

1、建立TCP连接:

接收或拒绝连接请求

发送请求报文

澳门新萄京官方网站 24

1.摘录一个DNS的解析过程

澳门新萄京官方网站 25

DNS解析(图片来自网络).png

1、在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(http://qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找http://qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。
6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。

2、接收请求:

接收客户端发来的请求报文中的信息对某资源的一次请求的过程

Web访问响应模型(Web I/O)

1)单进程I/O模型:

启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应

2)多进程I/O模型:

并行启动多个进程,每个进程响应一个连接请求

3)复用I/O结构:

启动一个进程,同时响应N个连接请求

实现方法:    多线程模型和事件驱动

      多线程模型: 一个进程生成N个线程,每线程响应一个连接请求

      事件驱动:    一个进程处理N个请求

4)复用的多进程I/O模型:

启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求

2.

澳门新萄京官方网站 26

图片源自知乎.png

3、处理请求:

服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理

澳门新萄京官方网站 27

HTTP常用请求方式,Method
GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

五.wireshark数据分析记录

背景:xqd-shw平台成功单的转译文本到观澜机器192.169.51.3的数据推送过程,发起的是HTTP的post请求

4、访问资源:

服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源

资源放在服务端特定的目录下

备注:通过MAC地址和端口号确定具体的应用程序

1.执行tupdump拿到抓包文件,然后放在wireshark进行分析

tcpdump -i bond0 -s 0 host 192.169.51.3 -w target8

5、构建响应报文:

一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中 包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体

澳门新萄京官方网站 28

2.wireshark的过滤语句

因为是tomcat项目,server.xml中指定对外端口为9098,服务在192.168.50.124上访问192.169.51.3:8080端口时,src地址的端口是随机指定的,不是9098
tcp.port == 60948

6、发送响应报文

向客户端回复报文

3.记录整个过程
  • DNS的解析,响应

  • TCP的三次握手见上图三次握手

  • TCP的数据包按段发送(拼接下图的35个数据段)

  • 发起http请求

![](https://upload-images.jianshu.io/upload_images/539247-42b6a19e97e1593e.png)

wireshark-Http请求地址.png
  • 响应http请求
![](https://upload-images.jianshu.io/upload_images/539247-7811e0af6f6f750a.png)

wireshark-Http响应.png
  • TCP的四次挥手(见上述四次握手情况二)

7、记录日志:

最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务

备注:这中间还要涉及到https的建立过程

数据传输完毕就要断开链接了

参考文档:

Wireshark抓包工具使用以及数据包分析
简述TCP的三次握手过程
TCP协议中的三次握手和四次挥手(图解)
DNS解析的过程是什么,求详细的?
DNS解析过程详解,探究百度官网
Wireshark表达式使用技巧——IP过滤
TCP:三次握手,URG、ACK、PSH、RST、SYN、FIN 含义
Tcp抓包以及tcp状态解释
WIRESHARK 实用过滤表达式(针对IP、协议、端口、长度和内容)
Linux tcpdump命令详解
新之助酱
郭无心
Wireshark数据抓包教程之认识捕获分析数据包

四次挥手

如图

澳门新萄京官方网站 29

备注:

数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。

过程

  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连接还没有释放,必须经过(最长报文段寿命)的时间后当客户端撤销相应的TCB后,才进入CLOSED状态。
  6. 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

 

问题1-为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN ACK报文。其中ACK报文是用来应答的,

SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,

所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,

我才能发送FIN报文,因此不能一起发送。故需要四步握手。

问题2-为什么要三次握手

答:

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

 

网上转载的例子不错:

三次握手:

A:“喂,你听得到吗?”A->SYN_SEND

B:“我听得到呀,你听得到我吗?”应答与请求同时发出 B->SYN_RCVD | A->ESTABLISHED

A:“我能听到你,今天balabala……”B->ESTABLISHED

四次挥手:

A:“喂,我不说了。”A->FIN_WAIT1

B:“我知道了。等下,上一句还没说完。Balabala…..”B->CLOSE_WAIT | A->FIN_WAIT2

B:”好了,说完了,我也不说了。”B->LAST_ACK

A:”我知道了。”A->TIME_WAIT | B->CLOSED

A等待2MSL,保证B收到了消息,否则重说一次”我知道了”,A->CLOSED

 

参考链接

1、http://www.zsythink.net/archives/76

2、

3、

4、

本文由澳门新萄京官方网站发布于澳门新萄京官方网站,转载请注明出处:TCP连接的握手和挥手,输入到页面展现发生了什

关键词: