计算机网络] Tcp/IP 第 5 层协议、Udp 报文构成、Udp 与 Tcp 的区别
Tcp/IP五层协议
TCP/IP模型是计算机网络的核心协议之一,通常被分为五层,每一层都有其独特的功能和作用。以下是TCP/IP模型的五层协议的简要描述:
-
物理层:这一层涉及实际的物理连接,定义了硬件传输介质的特性,例如电缆、网络接口,以及信号的传输标准。它负责将比特流通过物理媒介传输。
-
数据链路层:这一层提供设备间的数据传输和错误检测。它负责将数据封装成帧,并通过物理地址(如MAC地址)进行局域网内的通信。常见的协议包括以太网和Wi-Fi。
-
网络层:这一层负责将数据包从源地址传输到目的地址,处理网络间的路由选择。IP协议是网络层的核心,用于确定数据包的路由路径,并为每一个网络设备分配唯一的IP地址。
-
传输层:这一层提供主机间的通信服务,确保数据可靠传输。主要协议包括TCP(传输控制协议)和UDP(用户数据报协议)。TCP提供可靠、面向连接的服务,确保数据的完整性和顺序;而UDP则提供无连接的服务,适用于时延敏感的应用。
-
应用层:这一层为用户提供网络服务,支持具体的应用程序,处理各种网络协议,如HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)等。应用层直接与用户的应用程序交互。
这一模型的层次结构使每一层能够独立发展与演进,同时也提高了网络协议设计的灵活性。
Tcp/IP协议每一层协议的功能
TCP/IP模型是计算机网络中常用的协议架构,通常被分为五层,每一层都有其独特的功能与作用。以下是对TCP/IP五层协议的详细描述:
1. 物理层
- 功能:物理层负责实际的数据传输,即通过物理媒介发送和接收原始比特流。它定义了电缆、连接器、信号和传输媒介的特性,例如电压、传输速率和传输距离。
- 主要内容:物理设备(如网络接口卡、集线器)以及支持无线通信的技术(如Wi-Fi)。
2. 数据链路层
- 功能:数据链路层在物理层的基础上,负责节点之间的数据帧传输和错误检测。它确保数据在同一局域网内有效传输,并管理物理地址(如MAC地址)。
- 主要内容:帧的封装与解封装、错误检测(如CRC)、流量控制以及帧同步。常见协议包括以太网和Wi-Fi。
3. 网络层
- 功能:网络层负责数据在不同网络之间的传输和路由选择,处理IP地址并确保数据包能够从源地址成功送达目的地址。网络层通过路由选择算法选择最佳路径。
- 主要内容:IP协议(IPv4、IPv6)、路由器、子网划分及地址分配。
4. 传输层
- 功能:传输层提供主机之间的端到端通信,管理数据的完整性和顺序。它允许应用通过不同类型的服务进行通信。
- 主要内容:TCP(传输控制协议)和UDP(用户数据报协议)。TCP提供可靠、面向连接的服务,而UDP提供无连接、低延迟的服务。
5. 应用层
- 功能:应用层为用户提供网络服务,支持各种网络应用程序。它处理高层协议,并直接与用户的应用交互。
- 主要内容:常见的应用层协议包括HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)、DNS(域名系统)等。
总结
TCP/IP五层协议通过明确的层次划分,使得网络协议的设计和实现更加灵活,有助于不同层次间的独立发展。每一层都承担不同的功能,相互协作,以实现高效的数据通信。
Udp报文组成
UDP(用户数据报协议)是一种无连接的网络通信协议,在计算机网络中常用于快速传输数据。UDP的报文结构相对简单,主要由以下几个部分组成:
-
源端口(16位):发送方应用程序使用的端口号。可以用于区分多个服务或应用。
-
目的端口(16位):接收方应用程序使用的端口号。与源端口一起,确保数据包能够到达正确的应用程序。
-
长度(16位):UDP报文头和数据部分的总长度,以字节为单位。最小长度为8字节(仅包含头部)。
-
校验和(16位):用于检验UDP报文在传输过程中是否出现错误。虽然UDP允许不使用校验和,但为了提高数据传输的可靠性,建议始终使用。
-
数据部分:实际传输的数据,可以是任意长度,但需注意最大传输单元(MTU)的限制。
UDP的简洁结构使其在实时应用中具有低延迟的优势,但也因为缺乏连接管理和重传机制而不保证数据的可靠到达。
效验和
UDP(用户数据报协议)中的校验和是一项重要的错误检测机制,用于确保在数据传输过程中数据的完整性。以下是关于UDP校验和的详细描述:
功能与目的
- 错误检验:校验和的主要功能是检测在数据传输过程中是否发生了错误,比如位翻转或数据丢失。
- 完整性保障:确保接收方收到的数据与发送方发送的数据一致,防止因网络传输错误导致的不良影响。
校验和的计算
-
计算内容:UDP校验和是对UDP头部和数据部分的全部内容进行计算。具体来说,校验和计算包括UDP头(8字节)和UDP数据部分的所有字节。
-
伪头部:在计算过程中,还会使用一个称为“伪头部”的概念。伪头部包含来自IP头部的信息,用于帮助确保数据包在传输过程中的目标地址和协议正确。伪头部包括以下字段:
- 源IP地址(32位)
- 目的IP地址(32位)
- 协议(8位),对于UDP来说是17
- UDP长度(16位)
-
计算方法:校验和的计算使用一种称为“二进制反码求和”的方法:
- 将所有16位字(2字节)块相加,并处理任何进位;
- 最后对结果取反(即将0变为1,将1变为0),得到的值即为校验和。
校验和的使用
- 附加到报文:计算出的校验和会被放在UDP头部的校验和字段中。
- 接收方的校验:接收方在接收UDP报文后,使用相同的方法计算其校验和。如果计算的校验和结果为0,则说明数据在传输过程中未发生错误;如果不为0,则表示数据包可能已损坏,接收方可以选择丢弃该数据包。
注意事项
- 可选性:UDP协议允许不使用校验和。在某些应用中,可能选择不计算校验和以提高性能,但一般建议总是使用,以确保数据的完整性。
UDP校验和的设计增强了数据传输的可靠性,即使UDP本身是无连接的协议。
Udp与Tcp的区别
UDP(用户数据报协议)和TCP(传输控制协议)是计算机网络中两种常用的传输层协议,它们在设计目标、功能和应用场景上存在明显的区别。以下是UDP与TCP的主要区别:
1. 连接性
- TCP:面向连接。在数据传输之前,TCP需要建立连接(通过三次握手)以确保双方都准备好进行通信。
- UDP:无连接。UDP在发送数据之前不需要建立连接,数据可以直接发送给接收方。
2. 可靠性
- TCP:提供可靠的数据传输。TCP通过确认机制、重传机制和顺序控制,确保数据的完整性和正确顺序。
- UDP:不提供可靠性保障。UDP不对数据包进行确认、重传和顺序控制,数据可能在传输过程中丢失或乱序,接收方需要自行处理这些问题。
3. 数据传输方式
- TCP:面向字节流,数据被视为一个连续的字节流,发送和接收的数据可以任意长度,由TCP负责将其分成适当的段。
- UDP:面向数据报,数据被看作一个个独立的数据报(datagram),每个数据报都是独立的,最大长度受限于MTU。
4. 拥塞控制
- TCP:具有拥塞控制机制,通过动态调整发送速率,应对网络的拥塞情况,确保网络的稳定性。
- UDP:不具备拥塞控制机制,发送方可以以任意速率发送数据,可能会导致网络拥堵和数据丢失。
5. 速度与开销
- TCP:由于需要建立连接、维护状态和处理可靠性,开销较大,速度相对较慢。
- UDP:由于其简单的头部结构和无连接特性,开销较小,能实现更快的数据传输。
6. 应用场景
- TCP:适用于需要可靠传输、数据完整性及顺序的应用,例如网页浏览(HTTP/HTTPS)、文件传输(FTP)、电子邮件(SMTP)。
- UDP:适用于对速度要求高、可以容忍一定丢包情况的实时应用,例如视频会议、在线游戏、VoIP(语音通信)、流媒体传输。
总结
TCP与UDP各有优缺点,选择使用哪个协议主要取决于具体应用的需求。TCP适用于需要可靠性和顺序的场景,而UDP则适合实时性强、对延迟敏感的应用。
上一篇: Python-Numpy
下一篇: 麒麟系统串行端口配置
推荐阅读
-
计算机网络] Tcp/IP 第 5 层协议、Udp 报文构成、Udp 与 Tcp 的区别
-
go语言Socket编程-Socket编程 什么是Socket Socket,英文含义是插座、插孔,一般称之为套接字,用于描述IP地址和端口。可以实现不同程序间的数据通信。 Socket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用:Socket,该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。 套接字的内核实现较为复杂,不宜在学习初期深入学习,了解到如下结构足矣。 套接字通讯原理示意 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。“IP地址+端口号”就对应一个socket。欲建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接。因此可以用Socket来描述网络连接的一对一关系。 常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。 网络应用程序设计模式 C/S模式 传统的网络应用设计模式,客户机(client)/服务器(server)模式。需要在通讯两端各自部署客户机和服务器来完成数据通信。 B/S模式 浏览器(Browser)/服务器(Server)模式。只需在一端部署服务器,而另外一端使用每台PC都默认配置的浏览器即可完成数据的传输。 优缺点 对于C/S模式来说,其优点明显。客户端位于目标主机上可以保证性能,将数据缓存至客户端本地,从而提高数据传输效率。且,一般来说客户端和服务器程序由一个开发团队创作,所以他们之间所采用的协议相对灵活。可以在标准协议的基础上根据需求裁剪及定制。例如,腾讯所采用的通信协议,即为ftp协议的修改剪裁版。 因此,传统的网络应用程序及较大型的网络应用程序都首选C/S模式进行开发。如,知名的网络游戏魔兽世界。3D画面,数据量庞大,使用C/S模式可以提前在本地进行大量数据的缓存处理,从而提高观感。 C/S模式的缺点也较突出。由于客户端和服务器都需要有一个开发团队来完成开发。工作量将成倍提升,开发周期较长。另外,从用户角度出发,需要将客户端安插至用户主机上,对用户主机的安全性构成威胁。这也是很多用户不愿使用C/S模式应用程序的重要原因。 B/S模式相比C/S模式而言,由于它没有独立的客户端,使用标准浏览器作为客户端,其工作开发量较小。只需开发服务器端即可。另外由于其采用浏览器显示数据,因此移植性非常好,不受平台限制。如早期的偷菜游戏,在各个平台上都可以完美运行。 B/S模式的缺点也较明显。由于使用第三方浏览器,因此网络应用支持受限。另外,没有客户端放到对方主机上,缓存数据不尽如人意,从而传输数据量受到限制。应用的观感大打折扣。第三,必须与浏览器一样,采用标准http协议进行通信,协议选择不灵活。 因此在开发过程中,模式的选择由上述各自的特点决定。根据实际需求选择应用程序设计模式。 简单的C/S模型通信 Server端:Listen函数 func Listen(network, address string) (Listener, error) network:选用的协议:TCP、UDP, 如:“tcp”或 “udp” address:IP地址+端口号, 如:“127.0.0.1:8000”或 “:8000” Listener 接口: type Listener interface { Accept (Conn, error) Close error Addr Addr } Conn 接口: type Conn interface { Read(b byte) (n int, err error) Write(b byte) (n int, err error) Close error LocalAddr Addr RemoteAddr Addr SetDeadline(t time.Time) error SetReadDeadline(t time.Time) error SetWriteDeadline(t time.Time) error } 参看 [<u>https://studygolang.com/pkgdoc</u>](https://studygolang.com/pkgdoc) 中文帮助文档中的demo: 示例代码:TCP服务器.go package main import ( "net" "fmt" ) func main { // 创建监听 listener, err:= net.Listen("tcp", ":8000") if err != nil { fmt.Println("listen err:", err) return } defer listener.Close // 主协程结束时,关闭listener fmt.Println("服务器等待客户端建立连接...") // 等待客户端连接请求 conn, err := listener.Accept if err != nil { fmt.Println("accept err:", err) return } defer conn.Close // 使用结束,断开与客户端链接 fmt.Println("客户端与服务器连接建立成功...") // 接收客户端数据 buf := make(byte, 1024) // 创建1024大小的缓冲区,用于read n, err := conn.Read(buf) if err != nil { fmt.Println("read err:", err) return } fmt.Println("服务器读到:", string(buf[:n])) // 读多少,打印多少。 }