TCP连接的握手和挥手分分快三全天计划网站

作者:电脑系统

HTTP请求相应处理

1.1 概述-网络编程原型

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

2.

分分快三全天计划网站 1

图片源自知乎.png

三次握手:

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

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

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

4.2为什么是四次?

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

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

分分快三全天计划网站 2

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

四次挥手:

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

 

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_WAIT2

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

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

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

2.四次挥手

分分快三全天计划网站 3

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连接就这样关闭了!

5、构建响应报文:

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

分分快三全天计划网站 4

4.1 原理

分分快三全天计划网站 5

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

五.wireshark数据分析记录

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

过程

第一次握手:建立连接,客户端将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-三次连接原理

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

分分快三全天计划网站 6

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服务器之间就是的交互查询就是迭代查询。

举例

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

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

A : 可以,听到了

好建立连接,开始聊天!

4-四次挥手原理

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

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

答:

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

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

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

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

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开始传送数据。

1.过滤出dns信息

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

分分快三全天计划网站 8

dns.png

web服务请求处理步骤

分分快三全天计划网站 9

1、基础

二.wireshark抓包分析

HTTP基本概念

1.2 TCP报文格式

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

分分快三全天计划网站 10

图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:释放一个连接。

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

分分快三全天计划网站 11

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

一次完整的HTTP请求过程

2.2 为什么是三次?

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

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

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

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

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

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

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

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

 

没错,聪明如你一定想到了,说白了,客户端与服务端就是两台电脑,分别安装了不同的软件,服务端提供内容,客户端查看内容。分分快三全天计划网站 12

 

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

 

分分快三全天计划网站 13

 

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

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

分分快三全天计划网站 14

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
【备注】这里也可以观察端口的变化,定位到这四次挥手

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

分分快三全天计划网站 15

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

举例说明

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

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

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

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

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

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

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

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

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

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

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

 

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

 

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

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

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

TCP通信流程大致如下:

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

说明:

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

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

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

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

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

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

4、访问资源:

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

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

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

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的四次挥手(见上述四次握手情况二)

备注:

SYN(synchronous建立联机)

ACK(acknowledgement 确认)

PSH(push传送)

FIN(finish结束)

RST(reset重置)

URG(urgent紧急)

Sequence number(顺序号码)

Acknowledge number(确认号码)

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

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

 

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

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

答:

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

 

2.过滤出tcp包分析:

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

分分快三全天计划网站 16

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

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

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

 

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

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

   分分快三全天计划网站 17

参考文档:

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

四次挥手

如图

分分快三全天计划网站 18

备注:

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

四.DNS解析

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

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

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

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

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

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

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

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

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

 

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

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

网上转载的例子不错:

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

3、处理请求:

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

分分快三全天计划网站 19

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

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

分分快三全天计划网站 20

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状态

域名解析

当用户在浏览器输入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(物理地址)的解析

一.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实用手册

人性化HTTP请求相应图

分分快三全天计划网站 21

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

1.三次握手

分分快三全天计划网站 22

三次握手-图片源自网络,个人学习.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之间可以开始传输数据了。

TCP3次握手

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

分分快三全天计划网站 23

2.wireshark的过滤语句

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

2、接收请求:

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

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

1)单进程I/O模型:

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

2)多进程I/O模型:

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

3)复用I/O结构:

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

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

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

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

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

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

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

6、发送响应报文

向客户端回复报文

大致如下

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

过程

  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连接的时间要比客户端早一些。

 

HTTP服务通信过程

分分快三全天计划网站 24

参考链接

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

2、

3、

4、

1、建立TCP连接:

接收或拒绝连接请求

发送请求报文

分分快三全天计划网站 25

7、记录日志:

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

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

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

前言

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

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

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

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

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划 日记本 计算机网络