加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

网络通信协议之TCP

发布时间:2019-04-30 10:54:31 所属栏目:教程 来源:360技术
导读:部门很是轻易可以或许建设一个当地TCP处事器,正好可以用来说明一下TCP的哀求和相应进程。 在本篇文章,笔者将给各人先容下TCP成立毗连(三次握手),传输数据,断开毗连(四次挥手)的进程。 TCP简介 TCP:TCP(Transmission Control Protocol 传输节制协议)是一种
副问题[/!--empirenews.page--]

部门很是轻易可以或许建设一个当地TCP处事器,正好可以用来说明一下TCP的哀求和相应进程。

在本篇文章,笔者将给各人先容下TCP成立毗连(三次握手),传输数据,断开毗连(四次挥手)的进程。

收集协议

TCP简介

TCP:TCP(Transmission Control Protocol 传输节制协议)是一种面向毗连的、靠得住的、基于字节约的传输层通讯协议,由IETF的RFC 793界说。

聊到收集协议,我们经常会想到OSI(Open System Interconnection 开放式体系互联)七层模子、TCP/IP协议簇,她位于OSI、TCP/IP协议簇哪一层等题目。

如下图OSI七层模子及对应的TCP/IP协议簇所示,TCP位于OSI中的第四层(传输层)。位于TCP/IP协议簇中的第四层(TCP or UDP)。

下图为OSI七层模子及对应的TCP/IP协议簇

OSI TCP/IP Family

TCP是面向毗连的,是指客户端在发送、吸取数据之前必要先成立毗连,这个毗连进程必要三次握手来完成,笔者借助Python搭建了一个当地的TCP处事,并行使Wireshark(Wireshark(前称Ethereal)是一个收集封包说明软件。收集封包说明软件的成果是撷取收集封包,并尽也许表现出最为具体的收集封包资料。)

捕捉了当地的TCP处事器和TCP客户端之间哀求相应的进程,带各人一路看一下成立毗连(三次握手),传输数据,断开毗连(四次挥手)的进程。

当地搭建TCP处事筹备事变

笔者在前文提到了要用Python建设一个当地TCP处事器,而且说明TCP的哀求相应进程。这里笔者行使的是PythonIDE、Mac自带的终端简朴建设了一个当地TCP处事端和客户端。

笔者会说明的进程如下:

  • 建设而且启动一个端标语为20000的TCP处事端
  • 建设客户端并和处事端成立毗连(三次握手)
  • 客户端向处事端发送数据'AB'
  • 处事端到数据后给客户端发送数据'AB'
  • 处事端收到数据向客户端发送收到的数据(当前即'AB')
  • 客户端和处事端断开毗连(四次挥手)
  • 行使Wireshark对成立毗连(三次握手),传输数据,断开毗连(四次挥手)的进程举办说明

处事端代码:

  1. Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 03:13:28)   
  2. [Clang 6.0 (clang-600.0.57)] on darwin  
  3. Type "help", "copyright", "credits" or "license()" for more information.  
  4. >>> from socketserver import BaseRequestHandler, TCPServer  
  5. >>> class EchoHandler(BaseRequestHandler):  
  6. def handle(self):  
  7. print('Got connection from', self.client_address)  
  8. while True:  
  9. msg = self.request.recv(8192)  
  10. if not msg:  
  11. break  
  12. self.request.send(msg)  
  13.  
  14.      
  15. >>> if __name__ == '__main__':  
  16. serv = TCPServer(('', 20000), EchoHandler)  
  17. serv.serve_forever() 
  18.  
  19.       
  20. Got connection from ('127.0.0.1', 59006) 

客户端代码:

  1. wangyongwangdeiMac:~ wangyongwang$ python  
  2. Python 2.7.15 (default, Oct 2 2018, 11:47:18)  
  3. [GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.11.45.2)] on darwin 
  4. Type "help", "copyright", "credits" or "license" for more information.  
  5. >>> from socket import socket, AF_INET, SOCK_STREAM  
  6. >>> s = socket(AF_INET, SOCK_STREAM)  
  7. >>> s.connect(('localhost', 20000)) 

上述代码的结果如下图所示:

TCP哀求相应结果图

TCP成立毗连结果图

如上图,Got connection from ('127.0.0.1', 62515)我们可以确定客户端行使的端口是59006。

通过上述筹备事变,下边笔者会行使Wireshark捕捉TCP哀求相应的整个进程,并举办响应说明。

TCP三次握手

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读