TCP通信详解

一、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,不再接收新的下载文件的请求
"""

参考代码如下:

      

      

      

    

 

 

原文地址:https://www.cnblogs.com/python58/p/10426188.html

时间: 2024-10-08 20:34:17

TCP通信详解的相关文章

《TCP/IP详解》

[TCP的那些事儿]TCP是个巨复杂的协议,而且不断地改进中.所以学习TCP本身是个比较痛苦的过程,但这个过程却能让人有很多收获.希望这篇快餐科普性文章能在快餐文化下让你对TCP有了解,并可以促发你对基础知识的兴趣和学习欲望. http://coolshell.cn/articles/11564.html http://coolshell.cn/articles/11609.html 大家知道,TCP/IP已成为计算机网络的事实上的标准.在关于TCP/IP的论著中,最有影响的就是两部著作.一部是

《TCP/IP详解卷1:协议》第14章 DNS:域名系统---读书笔记

<TCP/IP详解卷1:协议>第14章 DNS:域名系统---读书笔记 1.引言 5.指针查询 DNS中一直难于理解的部分就是指针查询方式,即给定一个IP地址,返回与该地址对应的域名. 当一个组织加入Internet,并获得DNS域名空间的授权,如noao.edu,则它们也获得了对应IP地址的in-addr.arpa域名空间的授权.在noao.edu这个例子中,它的网络号是140.252的B类网络.在DNS树中结点in-addr.arpa的下一级必须是该IP地址的第一字节(例中为140),再下

《TCP/IP详解卷2:实现》笔记--IP编址

1.接口和地址 在本文中讨论的所有接口和地址结构的一个例子配置如下图所示: 上图中显示了我们三个接口例子:以太网接口,SLIP接口和环回接口.它们都有一个链路层地址作为地址列表中的第一个结点. 显示的以太网接口有两个IP地址,SLIP接口有一个IP地址,并且环回接口有一个IP地址和一个OSI地址. 所有的IP地址都被链接到in_ifaddr列表中,并且所有链路层地址能从ifnet_addrs数组访问. 后面的部分讨论上图的数据结构以及用来查看和修改这些结构的IP专用ioctl命令. 2.sock

【转】TCP/IP详解学习笔记(二)

TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节 1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据包的IP地址来选择路由.这里就不重复了.首先来看看一个简单的系统路由表. Destination     Gateway         Genmask         Flags Metric Ref    Use Iface192.168.11.0    *               255.

《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(1)-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 <TCP/IP详解卷1:协

《TCP/IP详解卷2:实现》笔记--IP多播

D类IP地址(224.0.0.0到239.255.255.255)不识别互联网内的单个接口,但识别接口组,被称为多播组. 单个网络上的组成员利用IGMP协议在系统之间通信.多播路由器用多播选录协议,如DVMRP(distance vector multicast routing protocol,距离向量多播路由选择协议)传播成员信息. 在Net/3中,如果某个接口支持多播,那么在接口ifnet结构中的if_flags的标识IFF_MULTICAST比特就被打开. RFC 1112描述了多播对主

转:TCP/IP详解--举例明白发送/接收缓冲区、滑动窗口协议之间的关系

原文地址:http://blog.csdn.net/yusiguyuan/article/details/21439633#1536434-tsina-1-74921-66a1f5d8f89e9ad52626f6f40fdeadaa  TCP/IP详解--举例明白发送/接收缓冲区.滑动窗口协议之间的关系. 一个例子明白发送缓冲区.接受缓冲区.滑动窗口协议之间的关系. 在上面的几篇文章中简单介绍了上述几个概念在TCP网络编程中的关系,也对应了几个基本socket系统调用的几个行为,这里再列举一个例

《TCP/IP详解卷1:协议》第19章 TCP的交互数据流-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 <TCP/IP详解卷1:协

《TCP/IP详解卷1:协议》第2章 链路层-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 1.引言 从图1-4可以看出,在TCP/IP协议族中,链路层主要有三个目的: (1)为IP模块发送和接收IP数据报: (2)为ARP模块发送ARP请求和接收ARP应答. (3)为RARP发送RARP请求和接收RARP应答. TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网.令牌环网.FDDI(光纤分布式数据接口)及RS-232串行线路等. 2.以太网和IEEE 802封装 (1)以太网 以太网一般是指数字