首页 科技正文

欧博客户端下载:【极客思索】<计算机网络>:Wireshark抓包剖析TCP中的三次握手与四『次挥手』

admin 科技 2020-06-02 5 0
【摘要】本文重点剖析计算机网络中TCP〖协议中的握手和挥手的历程〗。

【「条件说明」】

『前段时间突然看到了一篇关于』TCP/IP模子的文章,心想这段时间在家里也用wireshark<抓了点包>,那么想着想着就以为需要温习一下网络知识,于是就有这篇博文的降生。固然网上关于TCP相关的知识点也是芸芸,闲着无事也可以多google深入明白一下,本文重点在剖析TCP〖协议中的握手和挥手的历程〗。

【抓包前准备】

既然要抓包,我的装备是个人电脑,操作系统是Mac OS。抓包工具是wireshark,至于怎么安装和一些基本的操作,可以点击参考这篇文章。

用内陆电脑模拟server和client,都是localhost的地址,然则我选择的是差别的端口举行标识。server的端口号:12345;client的端口号:50784。『由于是用的本机做的实验』,以是wireshark「监听的不」是网卡而是Loopback:lo0,如图所示:

以下是我模拟client和server的代码:

1)server端

-Python 代码
01
#! /usr/bin/python
02
# -*- coding: utf-8 -*-
03
 
04
import socket
05
 
06
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
07
 
08
server_address = ('127.0.0.1', 12345)
09
print "Starting up on %s:%s" % server_address
10
sock.bind(server_address)
11
 
12
sock.listen(1)
13
 
14
while True:
15
    print "Waiting for a connection"
16
    connection, client_address = sock.accept()
17
 
18
    try:
19
        print "Connection from", client_address
20
 
21
        data = connection.recv(1024)
22
        print "Receive '%s'" % data
23
    finally:
24
        connection.close()

2)client端-Python 代码

01
# /usr/bin/python
02
# -*- coding: utf-8 -*-
03
 
04
import socket
05
 
06
def check_tcp_status(ip, port):
07
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
08
 
09
    server_address = (ip, port)
10
    print 'Connecting to %s:%s.' % server_address
11
    sock.connect(server_address)
12
 
13
    message = "I'm TCP client"
14
    print 'Sending "%s".' % message
15
    sock.sendall(message)
16
 
17
    print 'Closing socket.'
18
    sock.close()
19
 
20
 
21
if __name__ == "__main__":
22
    print check_tcp_status("127.0.0.1", 12345)

代码比较简单,就是模拟了一次链接,可以多次执行client,client只要链接乐成就会发送一句话“I'm TCP client”,server一直死循环监听端口,(并(将)接受到的信息打)印到console中。

【效果剖析】

看到上面的console<输出之后>,我们看一下wireshark抓到的效果:

我用两种颜色标了出来,可以看到黄色框中的序号为1、2、3的三次通讯历程实在就是我们说(的三次握手);《握手确立之》后的序号为4、5、6便为传输数据的历程;而序号7、8、9、10就是我们所说的四次挥手的历程。

我们再进一步细看下握手、挥手这俩历程。

三次握手

sunbet  第1张

 

我们来总结一下握手的纪律:

  • 第一次握手:确立链接。客户端发送链接的请求,发送SYN报文,(将)Seq〖<“‘设置为’”>〗0。然后客户端就进入了SYN_SEND 『状态』[,守候服务器的确认。
  • 第二次握手:{服务器收到客户端的}SYN报文段。需要对这个SYN报文段举行确认,发送ACK报文,并(将)Ack〖<“‘设置为’”>〗1。〖同时〗,自己也要发送SYN请求信息,(将)Seq〖<“‘设置为’”>〗0,。服务器(将)上述的所有信息一并发送给客户端,此时服务器进入SYN_RECV 『状态』[。
  • 第三次握手:客户端收到服务器的ACK和SYN报文后,举行确认,然后(将)Ack〖<“‘设置为’”>〗1,Seq〖<“‘设置为’”>〗1,(向服务器发送)ACK报文段,这个报文段发送完毕之后,客户端和服务器都进入了ESTABLISHED 『状态』[。就此完成了TCP(的三次握手)。

四次挥手

sunbet  第2张

 

接着总结下挥手的纪律:

  • 第一次挥手:客户端想服务器发送一个FIN报文段,(将)设置Seq为15和Ack为1。此时客户端进入FIN_WAIT_1 『状态』[。这示意客户端没有数据要发送服务器了,请求关闭毗邻。
  • 第二次挥手:服务器收到了客户端发送的FIN报文段,‘向客户端回一个’ACK报文段,Ack〖<“‘设置为’”>〗16,Seq〖<“‘设置为’”>〗1;服务器进入了CLOSE_WAIT 『状态』[,客户端收到服务器返回的ACK报文之后随即进入FIN_WAIT_2 『状态』[。
  • 第三次挥手:【服务器会考察自己是否另有数据没有发送给客户】端,若是有,先把数据发送给客户端,『再发送』FIN报文;若是没有,那么服务器直接发送FIN报文给客户端。请求关闭毗邻,〖同时〗服务器进入LAST_ACK 『状态』[。
  • 第四次挥手:“客户端收到服务器发送的”FIN报文,(向服务器发送)ACK报文,(将)Seq〖<“‘设置为’”>〗16,Ack〖<“‘设置为’”>〗2,然后客户端进入TIME_WAIT 『状态』[;{服务器收到客户端的}ACK「报文之后就关闭了毗邻」;此时,客户端守候2msl后依然没有收到回复,则证实服务器已正常关闭,【客户端也可以关闭毗邻了】。

注重个纪律: 每次一方返回ACK报文的时刻,设置Ack=对方传来的Seq值+1。

【明白TCP/IP模子】

说完TCP协议之后,不能免俗的要聊一下TCP/IP协议模子,该模子是计算机网络的经典的模子了。该模子由OSI模子演化而来,由原来的7层简化为了5层,详细如下图所示:

sunbet  第3张

TCP/IP协议被称为传输控制协议/互联网协议,又称网络通讯协议(Transmission Control Protocol)。是由网络层的IP协媾和传输层的TCP‘协议组成’,是一个很大的协议聚集。

  • 物理层和数据链路层没有界说任何特定协议,支持所有的尺度和专用的协议。
  • 网络层界说了网络互联也就是IP协议,『主要包罗』IP、ARP、RARP、ICMP、IGMP。
  • 《传输层界说了》TCP和UDP(User Datagram Protocol),我们会后面重点先容一下TCP协议。
  • 应用层界说了HTTP(《超文本传输协议》)、FTP(文件传输协议)、DNS(域名系统)等协议。

TCP/IP的网络模子分层头脑算是异常有借鉴性的系统分层头脑。“映射”到我们的软件系统上来看,实在我们的软件系统更多的时刻也需要思量分层,条理之间通过接口来交互。(在严酷)的分层系统里,内部的层只对相邻的条理可见,这样就可以(将)一个复杂问题分解成增量步骤序列。由于每一层最多只影响两层,〖也给维护带来了很大的便利〗。

参考资料:

http://www.cnblogs.com/linyfeng/p/9496126.html

http://zhuanlan.zhihu.com/p/33797520

blog.csdn.net/zhzdeng/article/details/53490386

点击关注,第一时间领会华为云新鲜手艺~

sunbet  第4张

,

欧博网址开户

www.cx11yj.cn欢迎进入欧博网址(Allbet Gaming),欧博网址开放会员注册、代理开户、电脑客户端下载、苹果安卓下载等业务。

版权声明

本文仅代表作者观点,
不代表本站sunbet的立场。
本文系作者授权发表,未经许可,不得转载。

评论