• TCPIP协议学习


    TCP协议

    连接导向:TCP是一种面向连接的协议,这意味着通信的两端在建立通信之前必须通过握手过程建立连接。握手过程包括三次握手,其中客户端向服务器发送连接请求,服务器回复确认,最后客户端再次确认连接。这样建立的连接可确保可靠的数据传输。

    可靠性:TCP提供可靠的数据传输,通过使用确认和重传机制来确保数据正确到达目标。发送方将数据分成多个小的数据块(称为报文段),并将每个报文段编号。接收方在收到报文段后会发送确认消息给发送方,以确认已经接收到的报文段。如果发送方没有收到确认消息,它会认为数据丢失,并重新发送数据。这样可以确保数据的可靠性和完整性。

    流量控制:TCP使用滑动窗口机制进行流量控制。在通信双方建立连接时,它们会协商一个窗口大小,也就是允许发送方发送的未确认数据的最大量。接收方会告诉发送方它当前的窗口大小,发送方会根据窗口大小来控制发送速率,确保接收方能够及时处理接收到的数据,并避免数据的丢失。

    拥塞控制:TCP通过使用拥塞窗口和拥塞避免算法来控制网络拥塞。拥塞窗口指的是发送方可以发送的未确认数据的最大量。通过监视网络负载和延迟,TCP可以动态地调整拥塞窗口的大小,以避免网络拥塞并提高网络性能。

    面向字节流:TCP是一种面向字节流的协议,它将数据流分割成小的字节流进行传输,而不考虑应用层数据的边界。这意味着在接收端,TCP将接收到的数据重新组装成应用层认为有意义的消息。

    双向通信:TCP提供了全双工的双向通信能力,这意味着通信的两端可以同时发送和接收数据,并且可以独立地进行发送和接收操作。

    流量控制与拥塞控制的区别:

    流量控制,针对的是单个连接数据处理能力的控制。拥塞控制针对的是整个网络环境,数据处理能力的控制。

    TCP报文格式

    源端口号(16位):指示发送方的端口号。

    目标端口号(16位):指示接收方的端口号。

    序号号码(32位):指示报文段的第一个字节序号。

    确认号码(32位):在确认报文中,表示接收到的数据的下一个期望序号;在数据报文中,表示发送方期望收到的下一个序号。

    数据偏移(4位):指示TCP头部的长度,以32位字(4字节)为单位。这个字段指定了TCP头部的长度,最大长度为60字节。

    保留(6位):保留未使用的位,预留供将来使用。

    控制位(6位):用于指示TCP报文的不同控制标志,如SYN、ACK、FIN等。不同的标志组合代表不同的TCP操作。

    窗口长度(16位):表示接收方的窗口大小,用于流量控制。

    检验和(16位):用于对报文头部和数据部分进行差错检测,以确保数据的完整性。

    紧急指针(16位):指示紧急数据的字节偏移量。在大多数情况下,此字段不被使用。

    选项及填充(可变长度):可选字段,用于携带一些额外的信息,如最大报文长度、时间戳等。

    数据:TCP协议负责传输的应用层数据。

    三次握手

    第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。

    第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。

    第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

    四次挥手:

    中断连接端可以是客户端,也可以是服务器端。

    第一次挥手:客户端发送一个FIN和seq=u,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。

    第二次挥手:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。

    第三次挥手:当服务器端确定数据已发送完成,则向客户端发送FIN=N报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。

    第四次挥手:客户端收到FIN,seq = N 报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。最终完成了四次握手。

    IP协议

    IP协议是网络层的核心,负责数据包的传输和路由。IP协议有两个版本:IPv4和IPv6。

    IP协议的主要功能是在网络中传输数据包,负责数据包的路由和寻址。

    IP协议定义了数据包的格式,包括源IP地址和目标IP地址,以及其他控制信息。

    报文格式

    IPv4报文格式

    版本(Version)和头部长度(Header Length): IPv4报文的版本字段指示使用的是IPv4(值为4)。头部长度字段表示IP头部的长度,以32位字为单位,它通常是5,表示头部长度为20字节。

    服务类型(Type of Service,TOS): 这个字段用于指示数据包的服务质量和处理方式,例如优先级、延迟、吞吐量等。

    总长度(Total Length): 表示整个IP报文的总长度,包括IP头部和数据部分。

    标识 (Identification):占16位。因为 IP是无连接的服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的 MTU 而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。

    标志 (Flag):长度为3 位。标志字段中的最低位记为 MF(More Fragment).MF=1即表示后面"还有分片"的数据报.MF=0表示这已是若干数据报片中的最后一个.标志字段中间的一位记为DF(Don’t Fragment),意思是"不能分片",只有当 DF=0时才允许分片.

    片偏移:占 13位。也称段偏移,较长的分组在分片后,某片在原分组中的相对位置.也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以 8个字节为偏移单位,这就是说,每个分片的长度一定是 8字节(64位)的整数倍。

    生存时间(Time to Live,TTL): 表示数据包在网络中能够存活的最大路由器跳数,防止数据包在网络中无限循环。

    协议(Protocol): 指示IP头部之后的数据部分使用的上层协议,如TCP、UDP或ICMP。

    头部校验和(Header Checksum): 用于检验IP头部的完整性,以便接收方可以验证报文是否受损。

    源IP地址(Source IP Address)和目标IP地址(Destination IP Address): 分别指示发送者和接收者的IP地址。

    选项(Options): 可选字段,用于在需要时提供一些附加信息,如时间戳、记录路由等。

    数据(Data): 实际传输的数据部分。

    IPv6报文格式

    版本(Version)和流量类别(Traffic Class): IPv6报文的版本字段指示使用的是IPv6(值为6)。流量类别字段类似于IPv4中的TOS字段,指示数据包的处理优先级。

    流标签(Flow Label): 这个字段用于标识需要特殊处理的数据流,例如需要进行特定的服务质量保障。

    负载长度(Payload Length): 表示IPv6头部之后的有效载荷(数据)部分的长度。

    下一个头部(Next Header): 指示IPv6头部之后紧随的上层协议头部,如TCP、UDP或ICMPv6。

    跳数限制(Hop Limit): 类似于IPv4中的TTL字段,指示数据包在网络中能够存活的最大路由器跳数。

    源IPv6地址(Source IPv6 Address)和目标IPv6地址(Destination IPv6 Address): 分别指示发送者和接收者的IPv6地址。

    数据(Data): 实际传输的数据部分。

    需要注意的是,IPv6采用了扩展首部的概念,允许在头部后面添加多个扩展头部,从而增强了协议的灵活性和可扩展性。

    扩展首部(Extension Headers): 用于在IPv6头部后添加可选的扩展信息,如分片、认证、安全等。

    地址划分

    IPv4地址划分: IPv4地址划分通常基于三个主要部分:网络部分、子网部分和主机部分。这种划分方式使用子网掩码来定义哪些位用于网络、子网和主机。例如,一个IPv4地址如192.168.1.1,其中子网掩码为255.255.255.0,意味着前24位用于网络和子网,后8位用于主机。

    IPv6地址划分: IPv6的地址划分更加灵活,允许多种不同类型的地址。IPv6地址的前缀部分用于标识网络,而标识符部分用于标识主机。IPv6引入了以下几种类型的地址:单播地址(用于一对一通信)、多播地址(用于一对多通信)和任播地址(用于寻找网络中的最近设备)等。 IPv6还引入了前缀长度表示法,它允许根据需要使用不同长度的前缀来划分地址空间,从而更加灵活地配置网络。

    网关的作用

    IPv4 网关的作用:

    数据包转发: 当主机发送数据包到不同的网络时,数据包会经过IPv4网关,网关根据目标IP地址和路由表来决定如何转发数据包。

    网络地址转换(NAT): IPv4网关可以执行网络地址转换,允许多个主机共享单个公共IPv4地址,以缓解IPv4地址短缺问题。

    防火墙和安全策略: IPv4网关可以实施防火墙和安全策略,保护网络免受恶意攻击和未经授权的访问。

    流量管理: IPv4网关可以对流量进行管理和控制,确保网络资源被有效利用。

    IPv6 网关的作用:

    数据包转发: 和IPv4类似,当IPv6主机发送数据包到其他网络时,数据包会经过IPv6网关,网关根据目标IPv6地址和路由表来决定如何进行转发。

    流量管理和负载均衡: IPv6网关可以管理流量并在多个路径之间分配负载,确保网络资源的高效利用。

    网络地址转换(NAT66): IPv6通常不需要NAT,但某些情况下可能会用到NAT66,以实现特定的转换需求。

    安全性和防火墙: IPv6网关也可以实施安全策略和防火墙规则,保护网络免受攻击。

    多播和任播路由: IPv6支持多播和任播通信,IPv6网关可以负责处理这些特殊的路由情况。

    IP协议经常与ARP协议和ICMP协议配合使用

    网际控制报文协议 ICMP

    传输的数据报可能丢失、重复、延迟、乱序,而ICMP协议定义了 5种差错报文(源抑制、超时、目的不可达、重定向、要求分段)和 4种信息报文(回应请求、回应应答、地址屏蔽码请求、地址屏蔽码应答)。ICMP协议使得IP更加稳固、有效。

    地址解析协议 ARP

    ARP协议在网络接口层,用于解析IP地址到物理MAC地址的映射,将IP地址转化为物理地址

    什么是TCP/IP协议

    TCP/IP协议(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在不同网络之间传输信息的协议集合,TCP/IP协议不单单指的是TCP和IP两个协议,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。

    TCP/IP协议是整个网络通讯中最基本的协议,无论是底层数据包发包还是数据链路通讯,TCP/IP协议都起到了很重要的作用,是网络技术中一个非常重要的理论基础。

    TCP/IP协议内容

    TCP/IP协议是一组网络通信协议,用于在计算机网络中进行数据传输和通信。它分为四个分层,每个分层提供不同的功能。以下是TCP/IP协议的内容,按照分层结构进行介绍:

    网络接口层:

    网络接口层对应的是iso七层模型中的数据链路层和物理层

    网络接口层,也被称为数据链路层,是TCP/IP协议栈中的底层层次,位于协议栈的最底部。它的主要任务是处理与物理硬件和链路层相关的细节,以确保数据在物理媒体上的传输。

    网络接口层通常分为两个子层:

    逻辑链路控制子层(Logical Link Control, LLC):LLC子层负责建立逻辑连接、流量控制和错误检测。它是与网络层之间的接口,处理上层协议(如IP协议)的数据。

    介质访问控制子层(Media Access Control, MAC):MAC子层负责管理物理地址(MAC地址)和决定何时发送数据帧到物理媒体。MAC子层通常依赖于底层的物理传输媒体,如以太网、Wi-Fi等,以确定数据帧的传输时机。

    常见的网络接口层技术:

    以太网:以太网是最常见的网络接口层技术,用于有线局域网(LAN)和广域网(WAN)。它定义了一系列标准,包括以太网帧的格式和MAC地址的管理。

    Wi-Fi:Wi-Fi是一种无线局域网技术,也在网络接口层上操作。它使用了一种不同于有线以太网的协议和MAC地址管理。

    PPP(Point-to-Point Protocol):PPP是一种用于建立点对点连接的协议,通常用于拨号连接和DSL等宽带接入技术。

    HDLC(High-Level Data Link Control):HDLC是一种通用的数据链路协议,常用于串行通信。

    网络层:

    网络层对应的是iso七层模型中的网络层

    网络层又称 网际 (IP) 层。

    网络层主要负责数据包的传输和路由选择。它通过路由选择算法来选择最佳路径将数据包从源主机发送到目标主机,同时提供 IP 地址和逻辑地址的转换

    IP(Internet Protocol)协议:IP协议是互联网中的一种网络协议,它是TCP/IP协议套件的核心协议之一。IP协议定义了数据在网络中的传输方式和寻址规则,它负责将数据包从源地址传送到目标地址。

    传输层:

    传输层对应的是iso七层模型中的传输层

    传输层位于网络层之上,主要负责端到端的数据传输和可靠性保证。

    TCP协议(Transmission Control Protocol):提供可靠的、面向连接的数据传输。它将数据分割成报文段,提供流量控制、拥塞控制和错误恢复等功能,确保数据按照顺序到达。

    UDP协议(User Datagram Protocol):提供无连接的、不可靠的数据传输。适用于实时性要求较高的应用,如音视频传输和在线游戏。

    应用层:

    对应osi七层网络模型的前三层,应用层,表示层,会话层。

    应用层包含了各种应用程序和协议,用于实现具体的网络服务。

    HTTP协议用于Web浏览器和服务器之间的通信,支持超文本传输。

    FTP协议用于文件传输,支持文件上传和下载。

    SMTP协议用于电子邮件的发送。

    DNS协议用于域名解析,将域名映射为IP地址。

    DHCP协议用于自动分配IP地址和其他网络参数给设备。

    SNMP协议用于网络设备的管理和监控。

    Telnet和SSH协议用于远程登录到其他计算机。

    TCP/IP协议的工作流程:

    数据封装:
    数据从上层往下传输时,会被逐层封装成不同的协议数据单元(PDU)。应用层数据(如HTTP请求)被封装为应用层PDU。
    应用层PDU被封装为传输层PDU(TCP段或UDP数据报)。
    传输层PDU被封装为网络层PDU(IP数据报)。
    网络层PDU被封装为数据链路层PDU(以太网帧)。
    数据链路层PDU被封装为物理层的比特流传输。


    数据传输:
    TCP协议提供面向连接的可靠传输,而UDP协议提供非连接的不可靠传输。

    TCP使用三次握手建立连接,进行可靠数据传输,并通过序列号和应答机制保证数据的完整性和顺序性。
    UDP没有连接的概念,直接将数据包发送给目标地址,不保证可靠性和顺序性。


    数据路由:

    IP协议负责数据包的路由和转发。每个数据包在网络中通过IP地址标识源和目标主机,经过路由器进行转发,直到到达目标主机。

    数据解封装:

    在接收端,数据包逐层被解封装,从物理层到应用层,进行相应的处理和分发。

  • 相关阅读:
    进程调度的基本过程——请各位不要当渣男~
    C语言字符串函数的详解
    寻找文本之间的不同
    第70步 时间序列建模实战:ARIMA建模(JMP)
    上周热点回顾(8.29-9.4)
    PCA和LDA数据降维计算(含数学例子推导过程)
    gitlab数据备份和恢复
    算法,排序
    【毕业设计】深度学习中文文本分类(新闻分类 情感分类 垃圾邮件分类)
    C专家编程 第6章 运行的诗章:运行时数据结构 6.5 当函数被调用时发生了什么:过程活动记录
  • 原文地址:https://blog.csdn.net/m0_65960610/article/details/132612904