【前提说明】

前段时间突然看到了一篇关于TCP/IP模型的文章,心想这段时间在家里也用wireshark抓了点包,那么想着想着就觉得需要复习一下网络知识,于是就有这篇博文的诞生。当然网上关于TCP相关的知识点也是芸芸,闲着无事也可以多google深入理解一下,本文重点在分析TCP协议中的握手和挥手的过程。

【抓包前准备】

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

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

用本地电脑模拟server和client,都是localhost的地址,但是我选择的是不同的端口进行标识。server的端口号:12345;client的端口号:50784。因为是用的本机做的实验,所以wireshark监听的不是网卡而是Loopback:lo0,如图所示:

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

 1)server端
-Python 代码
01
#! /usr/bin/python
02
# -*- coding: utf-8 -*-
0304
import socket
0506
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
0708
server_address = ('127.0.0.1', 12345)
09
print "Starting up on %s:%s" % server_address
10
sock.bind(server_address)
1112
sock.listen(1)
1314
while True:
15print "Waiting for a connection"
16connection, client_address = sock.accept()
1718try:
19print "Connection from", client_address
2021data = connection.recv(1024)
22print "Receive '%s'" % data
23finally:
24connection.close()

2)client端-Python 代码

01
# /usr/bin/python
02
# -*- coding: utf-8 -*-
0304
import socket
0506
def check_tcp_status(ip, port):
07sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
0809server_address = (ip, port)
10print 'Connecting to %s:%s.' % server_address
11sock.connect(server_address)
1213message = "I'm TCP client"
14print 'Sending "%s".' % message
15sock.sendall(message)
1617print 'Closing socket.'
18sock.close()
192021
if __name__ == "__main__":
22print 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就是我们所说的四次挥手的过程。

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

 1)三次握手

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

1)第一次握手:建立链接。客户端发送链接的请求,发送SYN报文,将Seq设置为0。然后客户端就进入了SYN_SEND状态,等待服务器的确认。

2)第二次握手:服务器收到客户端的SYN报文段。需要对这个SYN报文段进行确认,发送ACK报文,并将Ack设置为1。同时,自己也要发送SYN请求信息,将Seq设置为0,。服务器将上述的所有信息一并发送给客户端,此时服务器进入SYN_RECV状态。

3)第三次握手:客户端收到服务器的ACK和SYN报文后,进行确认,然后将Ack设置为1,Seq设置为1,向服务器发送ACK报文段,这个报文段发送完毕之后,客户端和服务器都进入了ESTABLISHED状态。就此完成了TCP的三次握手。

 2)四次挥手

接着总结下挥手的规律:

1)第一次挥手:客户端想服务器发送一个FIN报文段,将设置Seq为15和Ack为1。此时客户端进入FIN_WAIT_1状态。这表示客户端没有数据要发送服务器了,请求关闭连接。

2)第二次挥手:服务器收到了客户端发送的FIN报文段,向客户端回一个ACK报文段,Ack设置为16,Seq设置为1;服务器进入了CLOSE_WAIT状态,客户端收到服务器返回的ACK报文之后随即进入FIN_WAIT_2状态。

3)第三次挥手:服务器会观察自己是否还有数据没有发送给客户端,如果有,先把数据发送给客户端,再发送FIN报文;如果没有,那么服务器直接发送FIN报文给客户端。请求关闭连接,同时服务器进入LAST_ACK状态。

3)第四次挥手:客户端收到服务器发送的FIN报文,向服务器发送ACK报文,将Seq设置为16,Ack设置为2,然后客户端进入TIME_WAIT状态;服务器收到客户端的ACK报文之后就关闭了连接;此时,客户端等待2msl后依然没有收到回复,则证明服务器已正常关闭,客户端也可以关闭连接了。

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

【理解TCP/IP模型】

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

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

1)物理层和数据链路层没有定义任何特定协议,支持所有的标准和专用的协议。

2)网络层定义了网络互联也就是IP协议,主要包括IP、ARP、RARP、ICMP、IGMP。

3)传输层定义了TCP和UDP(User Datagram Protocol),我们会后面重点介绍一下TCP协议。

4) 应用层定义了HTTP(超文本传输协议)、FTP(文件传输协议)、DNS(域名系统)等协议。

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

参考资料:

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

zhuanlan.zhihu.com/p/33797520

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

点击这里,了解更多精彩内容

【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手相关推荐

  1. 用wireshark抓包分析TCP协议的三次握手连接、四次握手断开

    用wireshark抓包分析TCP协议的三次握手连接.四次握手断开 一.TCP三次握手图解 二.TCP得四次挥手过程 三.用Fiddler抓包,分析验证一个HTTPS网站的TCP连接过程 一.TCP三 ...

  2. Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析

    Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析 一.介绍计算机网络体系结构 1.计算机的网络体系结构 在抓包分析TCP建立链接之前首先了解下计算机的网络通信的模型,我相信学习过计 ...

  3. Wireshark抓包分析结果中的LG bit和IG bit

    Wireshark抓包分析结果中的LG bit和IG bit Wireshark抓包结果中常出现LG bit和IG bit的字段,几乎每个协议包里都能找到,如图下这样: 点击通常会对应6个16进制数( ...

  4. 计算机网络【UDP与TCP协议(三次握手、四次挥手)】

    计算机网络[UDP与TCP协议(三次握手.四次挥手)]

  5. Wireshark抓包分析TCP连接、发送数据与断开过程

    准备工具: 1. 两台连接到同个局域网的电脑,或者虚拟机; 2. 在其中一台电脑安装Wireshark; 3. 在两台电脑上面都有TCP&UDP测试工具软件 TCP连接建立过程(三次握手): ...

  6. wireshark抓包分析TCP数据包

    1.直接从TCP的三次握手开始说起 三次握手就是客户与服务器建立连接的过程 客户向服务器发送SYN(SEQ=x)报文,然后就会进入SYN_SEND状态 服务器收到SYN报文之后,回应一个SYN(SEQ ...

  7. 【计算机网络面试】tcp/ip协议三次握手、四次挥手

    TCP报文格式 TCP 报文是 TCP 层传输的数据单元,也称为报文段.TCP 报文中每个字段如图所示. 上图中 TCP 报文中每个字段的含义如下: 源端口和目的端口字段 TCP源端口(Source ...

  8. 网络基础2-3(TCP协议,三次握手,四次挥手,TIME_WAIT状态的作用,TCP如何保证可靠传输,TCP连接中状态转化,滑动窗口,流量控制,快速重传,拥塞窗口,延迟应答,捎带应答,粘包问题)

    TCP协议 TCP协议概念 TCP全称为 "传输控制协议(Transmission Control Protocol"). 人如其名, 要对数据的传输进行一个详细的控制 TCP协议 ...

  9. wireshark抓包分析tcp连接与断开

    其实对于网络通信的学习,最好还是能够自己抓到包详细地看一下,不然只单单通过文字和图的描述印象不够深刻.本文通过实际的抓包操作来看一下tcp的连接与断开是怎样的. 首先需要去https://www.wi ...

最新文章

  1. java我的世界1.7.2怎么下载模组_我的世界1.7.2
  2. 《深入理解Java虚拟机》笔记4——类文件结构
  3. DRAM、SRAM、SDRAM、DDRSDRAM的区别
  4. c语言中主函数创建链表,主函数怎么调用函数(数据结构,创建链表)
  5. lasso回归_线性回归amp;lasso回归amp;岭回归介绍与对比
  6. Packagist / Composer 中国全量镜像
  7. lru算法实现 redis_使用数组与双向链表实现一个简单的LRU算法
  8. excel引用指定单元格数据_数据、运算符及单元格引用
  9. [翻译]禅与文件和文件夹组织的艺术 上
  10. 拼多多再添新瓜!15 岁上浙大、22 岁获世界冠军的天才黑客 Flanker 疑因拒绝违法攻击被强制开除...
  11. Performance --- 前端性能监控
  12. linux date命令_Linux date命令示例
  13. 华为平板鸿蒙评测,华为平板首发鸿蒙系统,Matepad Pro2 跑分首曝
  14. 计算机管理里面删打印机就卡住了,windows系统无法删除打印机任务(重启打印机无效)的解决方法...
  15. java面向对象数组实现家庭收支记账软件_C项目-家庭收支记账软件
  16. 帝国时代3如何快速实现低成本训练领事馆其它兵种
  17. OneDrive配合OneIndex搭建自用网盘
  18. Verilog 时钟分频
  19. ai人工智能开发_人工智能使Web开发的面貌发生变化
  20. 如何设计百万人抽奖系统

热门文章

  1. pandas 画折线图_如何从Pandas数据帧绘制多个折线图
  2. win7 计算机 打开很慢,Win7电脑网上邻居(网络)打开速度慢的怎么解决?
  3. 简书java前端_Java前端知识之JSP
  4. python入门指南阅读答案_【python】入门指南1
  5. log4j记录不同的日志_Spring boot中使用log4j记录日志
  6. java电力巡检系统 项目讲解_公司召开安全巡检系统APP试点项目上线启动会
  7. 计算机病毒主要以存储介质和计算机网络为媒介进行传播,计算机病毒主要以存储介质和计算机网络为媒介进行传播。...
  8. 符号扩展和无符号扩展
  9. [zz]linux修改密码出现Authentication token manipulation error的解决办法
  10. Hadoop MapReduce执行过程(一)