TCP最全最简单讲解

一、什么是TCP通信

TCP/IP协议包含了一系列的协议,也叫TCP/IP协议族(TCP/IP Protocol Suite,或TCP/IP
Protocols),简称TCP/IPTCP/IP协议族提供了点对点的连结机制,并且将传输数据帧的封装、寻址、传输、路由以及接收方式,都予以标准化.

二、OSI七层架构

OSI模型定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),每一层实现各自的功能和协议,并完成与相邻层的接口通信。OSI模型各层的通信协议,大致举例如左下表所示。

TCP/IP协议Internet互联网最基本的协议,其在一定程度上参考了七层ISO模型。OSI模型共有七层,从下到上分别是物理层、数据链路层、网络层、运输层、会话层、表示层和应用层。但是这显然是有些复杂的,所以在TCP/IP协议中,七层被简化为了四个层次。TCP/IP模型中的各种协议,依其功能不同,被分别归属到这四层之中,常被视为是简化过后的七层OSI模型。和OSI的对比如右下表所示

三、TCP协议详解

TCP/IP协议的应用层的主要协议有HTTPTelnetFTPSMTP等,是用来读取来自传输层的数据或者将数据传输写入传输层;传输层的主要协议有UDPTCP,实现端对端的数据传输;网络层的主要协议有ICMPIPIGMP,主要负责网络中数据包的传送等;链路层有时也称作数据链路层或网络接口层,主要协议有ARPRARP
通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡,它们一起处理与传输媒介(如电缆或其他物理设备)的物理接口细节。

(一)TCP/IP协议的应用层 

应用层包括所有和应用程序协同工作,并利用基础网络交换应用程序的业务数据的协议。一些特定的程序被认为运行在这个层上,该层协议所提供的服务能直接支持用户应用。应用层协议包括HTTP(万维网服务)、FTP(文件传输)、SMTP(电子邮件)、SSH(安全远程登陆)、DNS(域名解析)等协议。

(二)TCP/IP协议的传输层

  传输层的协议,解决了诸如端到端可靠性问题,能确保数据可靠的到达目的地,甚至能保证数据按照正确的顺序到达目的地。传输层的主要功能大致如下:(1)为端到端连接提供传输服务;(2)这种传输服务分为可靠和不可靠的,其中TCP是典型的可靠传输,而UDP则是不可靠传输;(3)为端到端连接提供流量控制、差错控制、QoS(Quality of Service)服务质量等管理服务。

(三)TCP/IP协议的网络层

TCP/IP协议网络层的作用是在复杂的网络环境中为要发送的数据报找到一个合适的路径进行传输。简单来说,网络层负责将数据传输到目标地址,目标地址可以是多个网络通过路由器连接而成的某一个地址。另外,网络层负责寻找合适的路径到达对方计算机,并把数据帧传送给对方,网络层还可以实现拥塞控制、网际互连等功能。网络层协议的代表包括:ICMPIPIGMP等。

(四)TCP/IP协议的链路层

链路层有时也称作数据链路层或网络接口层,用来处理连接网络的硬件部分。该层既包括操作系统硬件的设备驱动、NIC(网卡)、光纤等物理可见部分,还包括连接器等一切传输媒介。在这一层,数据的传输单位为比特。其主要协议有ARPRARP等。

四、物理层

交换机内部维护一张 MAC 地址表,记录着每一个 MAC 地址的设备,连接在其哪一个端口上。

交换是按照通信两端传输信息的需要,用人工或设备自动完成的方法,把要传输的信息送到符合要求的相应路由上的技术的统称。交换机根据工作位置的不同,可以分为广域网交换机和局域网交换机。广域的交换机就是一种在通信系统中完成信息交换功能的设备,它应用在数据链路层。交换机有多个端口,每个端口都具有桥接功能,可以连接一个局域网或一台高性能服务器或工作站。实际上,交换机有时被称为多端口网桥。

到达交换机时,交换机内部通过自己维护的 MAC 地址表,发现目标机器 B MAC 地址 bb-bb-bb-bb-bb-bb 映射到了端口 1 上,于是把数据从 1 号端口发给了 B你给这个通过这样传输方式而组成的小范围的网络,叫做以太网。

交换机内部维护一张 MAC 地址表,记录着每一个 MAC 地址的设备,连接在其哪一个端口上,如右图所示。

五、IP和路由器

我们先从现实中 MAC 地址的结构入手,MAC地址也叫物理地址、硬件地址,长度为 48 位,一般这样来表示00-16-EA-AE-3C-40它是由网络设备制造商生产时烧录在网卡的EPROM(一种闪存芯片,通常可以通过程序擦写)。

现在每一台电脑,同时有自己的 MAC 地址,又有自己的 IP 地址,只不过 IP 地址是软件层面上的,可以随时修改,MAC 地址一般是无法修改的。这样一个可以随时修改的 IP 地址,就可以根据你规划的网络拓扑结构,来调整了。

路由器是用来寻找IP的,192.168.0.xxx 开头的,就算是在一个子网,否则就是在不同的子网。

六、HTTP协议

超文本传输协议(HypertextTransfer ProtocolHTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议,是万维网WWWWorld Wide Web)的数据通信的基础。

数据包在不同物理网络之间的传输过程中,网络层会通过路由器去对不同的网络之间的数据包进行存储、分组转发处理。构造互连网最简单的方法是把两个或多个网络通过路由器进行连接。路由器可以简单理解为一种特殊的用于网络互连的硬件盒,其作用是为不同类型的物理网络提供连接:以太网、令牌环网、点对点的链接和FDDI(光纤分布式数据接口)等等。

七、TCP的报文格式

TCP/IP协议栈中,IP协议层只关心如何使数据能够跨越本地网络边界的问题,而不关心数据如何传输。整体TCP/IP协议栈,共同配合一起解决数据如何通过许许多多个点对点通路,顺利传输到达目的地。一个点对点通路被称为一“跳”(hop),通过TCP/IP协议栈,网络成员能够在许多“跳”的基础上建立相互的数据通路。

传输层TCP协议提供了一种面向连接的、可靠的字节流服务,其数据帧格式,大致如下左图所示:

控制标志(ControlBits)共6bit位,具体的标志位为:URGACKPSHRSTSYNFIN6个标志位的说明,如下右表所示。

八、TCP的三次握手(建立连接)

1)第一次握手:Client进入SYN_SENT状态,发送一个SYN帧来主动打开传输通道,该帧的SYN标志位被设置为1,同时会带上Client分配好的SN序列号,该SN是根据时间产生的一个随机值,通常情况下每间隔4ms会加1。除此之外,SYN帧还会带一个MSS(最大报文段长度)可选项的值,表示客户端发送出去的最大数据块的长度。

2)第二次握手:Server端在收到SYN帧之后,会进入SYN_RCVD状态,同时返回SYN+ACK帧给Client,主要目的在于通知ClientServer端已经收到SYN消息,现在需要进行确认。Server端发出的SYN+ACK帧的ACK标志位被设置为1,其确认序号ANAcknowledgment
Number
)值被设置为ClientSN+1SYN+ACK帧的SYN标志位被设置为1SN值为Server端生成的SN序号;SYN+ACK帧的MSS(最大报文段长度)表示的是Server端的最大数据块长度。

3)第三次握手:Client在收到Server的第二次握手SYN+ACK确认帧之后,首先将自己的状态会从SYN_SENT变成ESTABLISHED,表示自己方向的连接通道已经建立成功,Client可以发送数据给Server端了。然后,ClientACK帧给Server端,该ACK帧的ACK标志位被设置为1,其确认序号ANAcknowledgment
Number
)值被设置为Server端的SN序列号+1。还有一种情况,Client可能会将ACK帧和第一帧要发送的数据,合并到一起发送给Server端。

4Server端在收到ClientACK帧之后,会从SYN_RCVD状态会进入ESTABLISHED状态,至此,Server方向的通道连接建立成功,Server可以发送数据给ClientTCP的全双工连接建立完成。

九、TCP的四次握手(断开连接)

1)第一次挥手:主动断开方(可以是客户端,也可以是服务器端),向对方发送一个FIN结束请求报文,此报文的FIN位被设置为1,并且正确设置Sequence
Number
(序列号)和Acknowledgment
Number
(确认号)。发送完成后,主动断开方进入FIN_WAIT_1状态,这表示主动断开方没有业务数据要发送给对方,准备关闭SOCKET连接了。

2)第二次挥手:正常情况下,在收到了主动断开方发送的FIN断开请求报文后,被动断开方会发送一个ACK响应报文,报文的Acknowledgment
Number
(确认号)值为断开请求报文的Sequence Number
(序列号)加1,该ACK确认报文的含义是:“我同意你的连接断开请求”。之后,被动断开方就进入了CLOSE-WAIT(关闭等待)状态,TCP协议服务会通知高层的应用进程,对方向本地方向的连接已经关闭,对方已经没有数据要发送了,若本地还要发送数据给对方,对方依然会接受。被动断开方的CLOSE-WAIT(关闭等待)还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

主动断开方在收到了ACK报文后,由FIN_WAIT_1转换成FIN_WAIT_2状态。

3)第三次挥手:在发送完成ACK报文后,被动断开方还可以继续完成业务数据的发送,待剩余数据发送完成后,或者CLOSE-WAIT(关闭等待)截止后,被动断开方会向主动断开方发送一个FIN+ACK结束响应报文,表示被动断开方的数据都发送完了,然后,被动断开方进入LAST_ACK状态。

4)第四次挥手:主动断开方收在到FIN+ACK断开响应报文后,还需要进行最后的确认,向被动断开方发送一个ACK确认报文,然后,自己就进入TIME_WAIT状态,等待超时后最终关闭连接。处于TIME_WAIT状态的主动断开方,在等待完成2MSL的时间后,如果期间没有收到其他报文,则证明对方已正常关闭,主动断开方的连接最终关闭。

被动断开方在收到主动断开方的最后的ACK报文以后,最终关闭了连接,自己啥也不管了。

十、TCP和UDP的区别

TCP协议面向连接的协议,提供稳定的双向通信,需要经过“三次握手”才能建立连接;为了提供稳定的数据传输功能,提供了超时重传机制,具有较高的稳定性。

UDP是无连接的,提供不稳定的单向通信功能,当然UDP也可以实现双向通信功能。虽然效率更高,但不能保证数据一定能够正确传输,尤其在网络拥塞的情况下。UDP通常用在视频和音频的传输,游戏通信,网络广播等。

### TCP 和 UDP 协议的基本概念 TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)均属于传输层协议,用于在网络环境中实现数据的高效传递。然而,两者的理念和技术特性存在显著差异。 #### 工作原理 - **TCP 的工作原理** TCP 是一种面向连接的、可靠的传输协议。其核心目标是确保数据能够安全、完整地从源端传送到目的端。为此,TCP 提供了一系列机制来保障数据传输的质量,包括但不限于校验和验证、确认应答以及重发丢失的数据包等功能[^2]。具体而言,在实际通信之前,双方设备需先完成三次握手过程以建立稳定连接;随后进入正常数据交换阶段;最后通过四次挥手断开链接释放资源。 - **UDP 的工作原理** 相较之下,UDP 则采取了一种更为简单直接的方式来进行数据传送 —— 它并不关心每次发送出去的信息是否成功抵达接收方,也不具备自动纠错能力。正因为如此,这种设计使得基于 UDP 的应用程序可以享受到更快捷的服务速度,尤其是在那些对延迟敏感却能容忍少量丢帧现象发生的场合下尤为适用,比如在线视频播放或者网络游戏等场景中经常可以看到它的身影[^1]。 ### 主要区别 | 特性 | TCP | UDP | |-----------------|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------| | 连接方式 | 面向连接 | 无连接 | | 可靠性 | 可靠性强,提供错误检测、流量控制及拥塞管理 | 不可靠,不保证消息送达 | | 数据单位 | 字节流 | 报文 | | 应用场景 | 文件下载/上传、电子邮件收发 | 实时音视频通话、DNS查询 | 综上所述,尽管两者同属传输层范畴内的关键技术手段之一,但由于各自侧重方向的不同决定了它们分别适合应用于不同类型的任务需求当中去[^3]。 ```python import socket # 创建一个基于TCP的Socket对象 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建一个基于UDP的Socket对象 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值