tcp通信详解

python58 python58     2023-03-09     739

关键词:

一、TCP简介

  1.TCP介绍

    a>TCP协议:TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为:TCP)是一种面向连接的、可靠的、基于字节流的通信协议

    1.面向连接:先连接,再通信,好比打电话模型

    2.可靠的,相对于UDP,TCP传输更可靠,TCP通过一序列的机制(面向连接机制、发送应答机制)来保障传输的可靠性

    3.基于字节流的,UDP创建UDP socket——DGRAM:基于数据报通信方式,每一次发送的数据都是一个独立的整体,包含目标主机的ip地址、端口号及发送数据的内容

    b>TCP通信的三个步骤

    基于面向连接的:1.与服务端建立连接

            2.收发数据

            3.关闭连接

  2.TCP特点

    a>面向连接

    1.先建立连接,再进行通信

    2.TCP连接是一对一的,而UDP可以一对一或一对多,UDP适合做广播程序

    a>可靠传输:通过一序列机制来保障TCP传输数据比UDP更可靠

    1.传送应答机制

    2.超时重传机制

    3.错误校验

    4.流量控制/阻塞管理

  3.TCP与UDP的不同点

    1.面向连接

    2.有序数据传输

    3.重发丢失的数据包

    4.丢弃重复的数据包

    5.无差错的数据传输

    6.阻塞/流量控制

  4.TCP与UDP的应用场景

    1.TCP的应用场景:适合通信质量要求较高的场景,http传输、文件传输、smtp等等,目前大部分的传输都是基于TCP协议传输

    2.UDP的应用场景:相对于TCP传输,UDP传输速度更快,实时性更好,耗资源更少,但稳定性、可靠性比TCP差,适合对网络通讯质量要求不高,速度要求尽量快,更实时,比如QQ语音,QQ视频

  5.UDP与TCP的通信模型

    a>UDP通信模型

      面向无连接,好比写信模型,没有严格的服务端与客户端之分

    b>TCP通信模型

      面向连接的,好比打电话模型,有严格的服务端与客户端之分

二、TCP网络程序-客户端(重点)

  1、TCP客户端实现流程

    1、创建一个TCP的socket对象

    2、与TCP服务端建立连接

    3、使用TCP socket 收发数据

    4、关闭连接

  参考代码如下:

          技术图片

                                    技术图片

三、TCP网络程序-服务端(重点)

  1.TCP服务端创建流程:

    1、创建服务端的server_socket,用于监听客户端的请求

    2、绑定端口

    3、server_socket开启监听,有主动连接改变为被动连接模式

    4、假如有客户端的请求,则立即接收,且创建一个与客户端对接的socket,与客户端进行通信

    5、使用新创建的socket与客户端通信

    6、关闭与客户端通信的socket,当该socket被关闭,则不再与当前客户端通信

    7、关闭用于监听客户端发送请求的socket,当该socket关闭,则不再接收新的客户端请求

  参考代码如下:

         技术图片

           技术图片

 

   2、同时为多个客户端提供服务:

        参考代码如下:

                              技术图片

                              技术图片

  4、为同一个客户端提供多次服务

    参考代码如下:

        技术图片

        技术图片

        技术图片

 

四、TCP注意点:

  

tcp服务端一般情况下都需要绑定,否则客户端找不到这个服务端
tcp客户端一般不绑定,因为是主动连接服务端,所以只要确定好服务端的ip、port等信息就好,本地客户端可以随机
tcp服务端中通过listen可以将socket创建出来的主动套接字变为被动的,这是做tcp服务端时必须要做的
当客户端需要连接服务端时,就需要使用connect进行连接,udp是不需要连接的而是直接发送,但是tcp必须先连接,只有连接成功才能通信
当一个tcp客户端连接服务端时,服务端会有1个新的套接字,这个套接字用来标记这个客户端,单独为这个客户端服务
listen后的套接字是被动套接字,用来接收新的客户端的连接请求的,而accept返回的新套接字是标记这个新客户端的
关闭listen后的套接字意味着被动套接字关闭了,会导致新的客户端不能够连接服务端,但是之前已经连接成功的客户端正常通信。
关闭accept返回的套接字意味着这个客户端已经服务完毕
当客户端的套接字调用close后,服务端会recv解堵塞,并且返回的长度为0,因此服务端可以通过返回数据的长度来区别客户端是否已经下线


五、三次握手、四次挥手(了解)

a> 三次握手
第一次握手: 客户端A向服务端B发送连接请求(客户端-->服务端方向)
第二次握手: 服务端B向客户端A发送确认连接,同时向客户端A发送连接请求(服务端-->客户端方向)
第三次握手: 客户端A收到服务端的确认信息,正确无误后,再向客户端发送确认连接信息(客户端-->服务端方向)

b> 四次挥手

六、 服务器如何复用同一个端口而不会提示端口被占用
"""
socket.setsockopt(level,option,value) :配置socket
level:等级,对哪个等级操作(ip,tcp,udp,socket等级)
option:设置哪个选项
socket.SO_REUSEADDR: 复用地址
value: True:表示复用,False,表示不复用
"""
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 提示:socket.setsockopt()方法要在 socket.bind()之前设置

   

 七、案列:文件下载器

  a>客户端实现:

    “”“文件下载器客户端实现流程

       1、创建一个TCP socket

       2、连接服务端

       3、获取用户输入的文件名

          4、把要下载的文件名发给服务端

          5、等待接收服务端回传的文件内容

        6、假如内容不为空,则写入到文件中

        7、关闭TCP socket

    ”“”

    参考代码如下:

           技术图片

           技术图片

  b>服务端实现

    

""" 文件下载服务端实现流程
1. 创建服务端的socket,用来做监听的
2. 绑定端口
3. 开启监听 listen
4. 循环接收客户端的下载请求
5. 获取客户端发送过来的要下载的文件名
6. 通过函数取得要下载的文件的内容
7. 把内容回传给客户端
8. 关闭与客户端对接的socket
9. 关闭服务端server_socket,不再接收新的下载文件的请求
"""

参考代码如下:

      技术图片

      技术图片

      技术图片

 

    

 

 

 

 

 


















tcp三次握手详解

...以携带数据?SYN泛洪攻击总结 TCP提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好通信两端之间的准备工作。准备工作TCP服务器 查看详情

❤️tcp通信传输协议详解❤️(java网络通信项目进阶二)(代码片段)

上篇教程回顾ServerSocket--监听客户端的连接,他的作用主要是建立一个连接 -ServerSocket-建立连接,拿到一个Socket-Telnet127.0.0.18888-客户端使用Telnet访问服务端建立连接-服务端可以拿到一个Socket的对象 -获取这个对象的输入输... 查看详情

tcp(控制传输协议)详解

1、传输层概述在OSI参考模型中,网络层是面向通信的最高层但同时也是面向用户程序的最底层。传输层的主要作用:复用:在发送端,多个应用程序公用一个传输层;分用:在接收端,传输层把从网络层接收到的数据报拆掉IP报... 查看详情

网络通信——tcp“三次握手““四次挥手“详解

...试题的热门考点,它们分别对应TCP的连接和释放过程1.TCP通信包含那几步?TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道上图主要包括三部分:*建立连接、传输数据、断开连接。*建立TCP连接很简单,... 查看详情

tcp通信(代码片段)

tcp通信详解目录:一.tcp概念二.通信流程&原理三.接口理解1.创建套接字socket2.绑定地址bind3.开始监听listen4.客户端发送连接请求connect5.服务端获取新建连接accept6.收发数据send&recv7.关闭套接字close四.代码封装tcp结构体目录:一.tc... 查看详情

前端基础-tcp/ip不完全详解(代码片段)

TCP/IP不完全详解TCP/IP是通信协议的统称。首先,我们先认识一下OSI参考模型OSI参考模型OSI参考模型中各个分层的作用如下:概括的说:应用层:为应用程序提供服务并规定应用程序中通信的相关细节。包括文件传输、电子邮件、... 查看详情

游戏开发实战unity使用socket通信实现简单的多人聊天室(万字详解|网络|tcp|通信|mirror|networking)(代码片段)

文章目录一、前言二、简单的Socket通信:多人聊天室1、服务端:python代码1.1、importsocket1.2、构造socket对象1.3、绑定/监听端口1.3、监听客户端连接1.4、接收客户端socket消息1.5、多线程1.6、完整代码:game_server.py2、客户... 查看详情

游戏开发实战unity使用socket通信实现简单的多人聊天室(万字详解|网络|tcp|通信|mirror|networking)(代码片段)

文章目录一、前言二、简单的Socket通信:多人聊天室1、服务端:python代码1.1、importsocket1.2、构造socket对象1.3、绑定/监听端口1.3、监听客户端连接1.4、接收客户端socket消息1.5、多线程1.6、完整代码:game_server.py2、客户... 查看详情

tcp协议详解(代码片段)

...头部信息:TCP头部信息出现在每个TCP报文段中,用于指定通信的源端端口号、目的端端口号、管理TCP连接、控制两个方向的数据流。TCP状态转移信息:TCP连接的任意一端都是一个状态机。在TCP连接从建立到断开的整个过程中,连... 查看详情

tcp包头详解(代码片段)

...协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的... 查看详情

tcp三次握手原理详解

...传输系统不能正常工作时,就需要通过其他的协议来保证通信的可靠。TCP就是这样的协议。TCP采用“带重 查看详情

socket详解

...A1、Socket(套接字)概念网络上两个程序通过一个双向的通信连接实现数据的交换,这个连接的一段称为一个socket,socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进... 查看详情

tcp协议详解(代码片段)

...议的特点是:面向连接、字节流和可靠传输。使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,... 查看详情

tcp协议粘包问题详解(代码片段)

...Server端shell命令并拿到其执行结果的程序,而涉及到网络通信就必然会出现socket模块,关于 查看详情

rpc通讯框架详解(代码片段)

RPC基本理论从单机走向分布式,产生了很多分布式的通信方式最古老也是最有效,并且永不过时的,TCP/UDP的二进制传输。事实上所有的通信方式归根结底都是TCP/UDPCORBACommonObjectRequestBrokerArchitecture:古老而复杂的&#... 查看详情

fastdfs通信协议详解(代码片段)

FastDFS通信协议详解本篇文章转载于FastDFS作者余庆大佬的FastDFS分享与交流公众号。FastDFS采用二进制TCP通信协议。一个数据包由包头(header)和包体(body)组成。包头只有10个字节,格式如下: @pkg_len... 查看详情

tcp/ip协议详解

...介绍  互联网协议(InternetProtocolSuite)是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构。它常被通称为TCP/IP协议族(英语:TCP/IPProtocolSuite,或TCP/IPProtocols),简称TCP/IP。说到网络协议,不... 查看详情

tcp的连接与断开(代码片段)

...立一个TCP会话,四次挥手后断开一个TCP会话。所有TCP通信必须在TCP会话中进行。学习TCP连接与断开时,不仅要知道建立连接时通信双方发送的报文和过程,还需要掌握断开和连接时双方TCP协议的状态变迁。一、TCP三次... 查看详情