美文网首页
tcp建立http链接

tcp建立http链接

作者: 秋幻旎苏 | 来源:发表于2017-11-26 16:49 被阅读0次

客户端TCP状态:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
服务器TCP状态:
CLOSED->LISTEN->SYN_RECV->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED

image.png

常用命令:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

一.tcp 三次握手

1.报文

SYN(synchronous):是TCP/IP建立连接时使用的握手信号。
在客户机和服务器之间建立正常的TCP网络连接时,客户机首先会向服务器发出一个SYN消息。
ACK (Acknowledgement)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。

2.状态

①SYN_SENT:表示请求连接,当你要访问其它的计算机的服务时首先要发个SYN信号给该端口,此时客户端状态为SYN_SENT,如果连接成功了就变为ESTABLISHED。

SYN_SENT状态非常短暂。但如果发现SYN_SENT非常多且在向不同的机器发出,那你的机器可能中了冲击波或震荡波之类的病毒了。这类病毒为了感染别的计算机,它就要扫描别的计算机,在扫描的过程中对每个要扫描的计算机都要发出了同步请求,这也是出现许多SYN_SENT的原因。

②SYN_RECV:是指,服务端被动打开后,接收到了客户端的SYN并且发送了ACK时的状态,是TCP三次握手的中间状态。再进一步接收到客户端的ACK就进入ESTABLISHED状态。

如果服务器存在很多的SYN_RECV,有如下两种可能情况
1.客户端没有收到服务器发送的[SYN,ACK]包
2.客户端收到了[SYN,ACK]包却没有发送ACK给客户端。

③ESTABLISHED:表示服务端和客户端TCP连接成功

二.tcp四次挥手

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

简单说来是 “先关读,后关写”,一共需要四个阶段。以客户机发起关闭连接为例:
1.服务器读通道关闭
2.客户机写通道关闭
3.客户机读通道关闭
4.服务器写通道关闭

1.报文

FIN:是TCP/IP关闭时使用的挥手信号。
收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
ACK (Acknowledgement)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。

2.状态

①FIN_WAIT1:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。

而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。

②CLOSE_WAIT:表示在等待关闭。(被动关闭)

当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态

③FIN_WAIT2:FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。
④LAST_ACK:被动关闭一方在发送FIN报文后,最后等待对方的ACK报文的状态。

当收到ACK报文后,也即可以进入到CLOSED

③TIME_WAIT:(主动关闭)表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。

是主动关闭链接时形成的,等待2MSL时间,约4分钟。主要是防止最后一个ACK丢失。 由于TIME_WAIT 的时间会非常长,因此server端应尽量减少主动关闭连接

###1.报文
状态:描述 
CLOSED:无连接是活动的或正在进行 
LISTEN:服务器在等待进入呼叫 
SYN_RECV:一个连接请求已经到达,等待确认 
SYN_SENT:应用已经开始,打开一个连接 
ESTABLISHED:正常数据传输状态 
FIN_WAIT1:应用说它已经完成 
FIN_WAIT2:另一边已同意释放 
ITMED_WAIT:等待所有分组死掉 
CLOSING:两边同时尝试关闭 
TIME_WAIT:另一边已初始化一个释放 
LAST_ACK:等待所有分组死掉
https://www.cnblogs.com/lovesong/p/5186200.html
https://www.cnblogs.com/strongery/p/5390483.html
https://www.cnblogs.com/jessezeng/p/5617105.html
http://blog.csdn.net/wodatoucai/article/details/64125944
https://www.cnblogs.com/langtianya/p/6648100.html
https://www.cnblogs.com/sunxucool/p/3449068.html
https://www.cnblogs.com/Jessy/p/3535612.html

相关文章

  • tcp建立http链接

    客户端TCP状态:CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_W...

  • springboot2.0集成webSocket

    WebSocket和http的区别? http协议是用在应用层的协议,他是基于tcp协议的,http协议建立链接也...

  • 用socket进行网络通信

    建立tcp传输 建立多线程访问 处理客户端请求以及生成HTTP报头 一个简单的链接搭建完成了访问http://12...

  • http与websocket的区别与原理

    WebSocket和HTTP的区别 http协议是用在应用层的协议,他是基于tcp协议的,http协议建立链接也必...

  • 点对点传输

    根据UDP信息建立TCP 链接 TCP 链接准备事项 服务端 工具类 客户端

  • HTTP的前世今生

    HTTP站在TCP之上 HTTP是建立在TCP之上,HTTP协议的瓶颈以及优化技巧其实都是基于TCP协议的本身特性...

  • http及https握手复用

    http长链接 http是一问一答的形式,本身没有长短的概念 http是基于tcp协议的,tcp是长链接 HTTP...

  • iOS网络请求

    http协议整个请求过程: ① 先建立TCP链接,三次握手 ② 根据网址(NSURL:同一资源定位符,网址就是资源...

  • TCP的三次握手四次握手

    HTTP是建立在TCP协议上的。 概念 TCP(Transmission Control Protocol):传输...

  • TCP三次握手和四次挥手

    TCP 三次握手 上图大概的解释了一下TCP协议建立的过程 wireshark 抓包tcp链接建立的过程 10.1...

网友评论

      本文标题:tcp建立http链接

      本文链接:https://www.haomeiwen.com/subject/ixvcbxtx.html