首页
学习
活动
专区
圈层
工具
发布

【Linux】: 传输层协议 TCP

一、前言 之前在这篇文章 传输层协议 UDP 中已经说过关于传输层的部分内容,现在我们来了解一下传输层 TCP 的内容吧 ‍ TCP 全称为 "传输控制协议( Transmission Control...实现滑动窗口: 确认序号是滑动窗口协议的基础,用于控制流量和实现可靠传输。 为什么不能只凭序号?...3️⃣ 三次握手才可以同步双方的初始化序列号 ⭕TCP协议通信的双方,都必须要维护序列号,序列号是实现可靠传输的一个关键因素,其作用如下: 接收端可以根据序列号进行重复数据的 去重 接收端可以根据序列号...站在传输层的角度, TCP 是一个一个报文过来的. 按照序号排好序放在缓冲区中. 站在应用层的角度, 看到的只是一串连续的字节数据....用 UDP 实现可靠传输(经典面试题)  参考 TCP 的可靠性机制, 在应用层实现类似的逻辑; ‍ 例如: 引入序列号, 保证数据顺序和完整性; 引入确认应答, 确保对端收到了数据; 引入超时重传

1.5K10

【Linux】:传输层协议 UDP

一、前言 之前在这篇文章 初识网络 中说过关于传输层的内容,以及在 Socket编程应用层UDP 也做过关于 UDP 的练习,如下: 传输层: 负责两台主机之间的数据传输。...面向数据报 应用层交给 UDP 多长的报文, UDP 原样发送, 既不会拆分, 也不会合并 用 UDP 传输 100 个字节的数据: 如果发送端调用一次 sendto, 发送 100 个字节, 那么接收端也必须调用对应的一次...调用 sendto 会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作; UDP 具有接收缓冲区....如果我们需要传输的数据超过 64K,就需要在应用层手动的分包,多次发送,并在接收端手动拼装; 6....基于UDP 的应用层协议 NFS: 网络文件系统 TFTP: 简单文件传输协议 DHCP: 动态主机配置协议 BOOTP: 启动协议(用于无盘设备启动) DNS: 域名解析协议 当然, 也包括你自己写

1.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    初识Linux · 传输层协议UDP

    那么在Linux内核中,进程和port的映射是通过一张哈希表来完成的,问题来了: 1.端口号是否可以被多个进程bind? 2.一个进程是否可以bind多个端口号?...UDP协议 在我们理解上面这张图片之前, 我们回想一个知识点,在最开始引入网络编程的时候,我们花了一番功夫认识了协议是什么,我们仅仅是基于Linux网络编程的特点,认为协议就是通信双方都认识的结构体,那么在今天...对于UDP协议来说,它的特点是无连接,不可靠传输,面向数据报。...对于不可靠传输,因为UDP一旦传输失败,它什么也不管,也不会进行重传,这点和TCP有很大的区别,TCP有多种方案应付传输失败的情况,比如超时重传等。...全双工 UDP协议也是支持全双工的,即它支持边读边写,不过它的发送缓冲区是没有TCP那种支持缓存管理机制的,比如超时重传,流量控制等机制的,所以它的缓冲区在应用层是无法感知的。

    47310

    【Linux网络】传输层协议UDP

    传输层 “负责数据能够从发送端传输到接收端” 是传输层最核心、最根本的任务。 网络层 负责的是 “主机到主机” 的通信(比如,你的电脑到一台遥远的服务器)。它只关心把数据包送到目标IP地址。...传输层要确保浏览器的数据交给服务器的Web服务,而不是别的。 如何实现?—— 通过端口号 1.1 再谈端口号 传输层使用 端口号 来标识主机上的不同应用程序。...SO_REUSEPORT(Linux 3.9+ 引入):明确设计用于允许多个进程(或线程)绑定到完全相同的 IP 地址和端口号。...下面是一个简单的示例,说明如何在应用层实现分包和组装: 假设我们要传输一个大型数据,我们将其分成多个包,每个包包含: 序列号(用于标识同一个大数据的传输,接收端通过序列号来区分不同的大数据) 总包数...由于UDP本身不保证可靠性,所以我们需要在应用层实现这些机制。这就是为什么在需要可靠传输时,我们通常使用TCP,或者使用基于UDP的可靠传输协议(如QUIC)的原因。

    20310

    初识Linux · 传输层协议TCP · 下

    确定了对方的接收缓冲区的大小,就是如何进行报文传输控制了,那么对于流量控制来说,滑动窗口就是它的核心机制之一。...keepalives) */ u32 lsndtime; /* timestamp of last sent data packet (for restart window) */ 这是滑动窗口在Linux...也就是说返回的是2001 3001 5001,其中丢了某个应答,是完全没有关系的,因为TCP的可靠传输。...举个例子: Telnet 协议早期就用 URG 实现“中断”功能,比如你敲 Ctrl+C,它就发一个带 URG 标志的包,中断对方的执行。...常见场景 服务端拒绝连接、半开连接清理、端口未监听 是否正常现象 有时是预期行为,有时是 bug,需结合上下文分析 以上就是TCP传输层协议的所有内容~

    38110

    初识Linux · 传输层协议TCP · 上

    前言: 前文有关传输层协议,我们介绍了UDP协议的基本字段以及简单介绍了如何UDP添加报头之后,如何分用,如何封装的,并且简单看了一下UDP的基本源码,发现的确很简单。...对于确认应答机制来说,它是TCP保证可靠传输的一个重要机制,在这里我们还需要额外理解一下什么是可靠传输。...虽然 TCP 的数据发送看似像一个“先进先出”的队列,但其内核实现是由 sk_buff 链表和一组序号变量(如 snd_nxt, write_seq, snd_una)共同维护的高效缓冲结构,支持顺序发送...三次握手初始化 状态维护 ✅ snd_nxt / snd_una / rcv_nxt等核心状态 超时重传机制 对于超时重传机制,我们后续结合实际的策略介绍,这里我们记住,服务端发送了报文但是没有收到应答,Linux...那么如果我们想要立即重启,使用的函数为: int opt = 1; setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); 以上是传输层协议

    36810

    【Linux】传输层协议:UDP和TCP

    传输层和网络层都是在linux内核中实现的,而linux内核是用C语言实现的,那UDP报头实际就是一个结构体,结构体成员变量实际就是UDP报头中的各个字段值,所以在分用时,只需要让指针指向数据包的前8个字节...Linux的文件系统联系起来,从而更好的理解传输层向上交付有效载荷这个过程。...另外服务器是会收到来自大量的不同的客户端的连接请求的,所以服务器是需要将这些大量的连接管理好的,因为我们知道传输层是在服务器主机的OS内部实现的,而操作系统需要管理连接,那采用的方式就一定是先描述,再组织...4.2 用UDP实现可靠性传输 1....其实用UDP实现可靠性传输,是有对应的方案的,因为摆在我们面前的TCP就是这个世界上最优秀的可靠性传输协议,而UDP也想要实现,其实就是在应用层仿照内核层TCP的机制来实现。

    2K30

    传输层

    ---- 传输层 前言 打算系统学习下计算机网络,就来翻阅经典的自顶向下 本篇是第三章传输层(书中翻译为运输层,故下面运输层和传输层可能会同时出现,anyway反正一个意思),主要关注TCP和UDP,还有注意拥塞控制...(logic communication) 功能,是在端系统中而不是在路由器中实现的 为了简化术语,我们将运输层分组称为报文段(segment)。...multiplexing)与多路分解(demultiplexing) 传输层协议支持的应用层协议如图所示: 2、多路复用与多路分解 我们考虑接收主机怎样将一个到达的运输层报文段定向到适当的套接字。...TCP 协议是一种面向连接,可靠,基于字节流的传输层通信协议。...RTT再将cwnd的值翻番,而是采用了一种较为 保守的方法,每个RTT只将cwnd的值增加一个MSS [RFC 5681] (3)快速恢复 快速恢复是TCP推荐的而非必需的构件[RFC5681] 结语 传输层的学习

    85020

    基于epoll的TP传输层实现

    抽象TP传输层设计   在使用epoll实现实际的传输层之前,先设计一个抽象的传输层,这个抽象的传输层是传输层实现的接口层。   ...接口层中一共有以下几个通用的类或者接口: (1)Socket:通用的套接字层,用于封装本地套接字,同时会在析构时自动关闭套接字,避免资源泄漏 (2)DataSink:通用的数据接收层,当传输层接收到数据时...:基本的服务器类,继承了Socket类 (6)BasicStream:基本的数据流泪,继承IStream和Socket类 1.1 抽象层类图 1.2 Socket类实现   #ifndef SOCKET...基于epoll实现服务器和客户端   在前面的内容中已经完成了抽象TP传输层和基础工具(消息队列、线程池、缓冲区抽象、事件循环和日志工具)的实现,接下来在抽象TP传输层和基础工具的基础上完成基于epoll...机制服务器和客户端的实现。

    84130

    【Linux网络编程】传输层协议TCP,UDP

    前言: 传输层是实现端到端通信的核心,主要涉及TCP和UDP 一,UDP协议 1,UDP协议的格式 16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度。...如果我们需要传输的数据超过64KB,就需要在应用层手动的进行分包,多次发送,并在接收端手动拼装。...当数据报详细交付时,当从应用层交付到传输层时,data指针向上移动一段空间,如果使用UDP协议,移动UDP报头的大小,然后填充对应UDP报头。...当数据报从传输层交付到网络层时,data指针向上移动,然后再填充上对应的报头 ,依次类推。 如果是向上层移动,那么就是data指针向下移动。...站在传输层的角度, TCP 是一个一个报文过来的,按照序号排好序放在缓冲区中。 站在应用层的角度, 看到的只是一串连续的字节数据.

    12810

    传输层 复习

    为什么需要运输层呢? 作用:从通信和信息处理的角度看,传输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层。...因此 从传输层的角度,真正通信的并不是主机而是主机的进程,传输层为两主机提供端到端的通信。...传输层有两个重要功能: 复用和分用 复用:在发送方的不同应用进程都可以使用同一个传输层协议传送数据(当然也需要加上适当的协议首部) 分用:接收方的传输层在剥去报文的首部后能够把这些数据正确交付给应用进程...PS:网络层传输的数据单元为『数据报』,传输层的数据单元为『报文段』,但为了方便起见,可以统称为『分组』。...如何实现流量控制? 由滑动窗口协议(连续ARQ协议)实现。 滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制。

    64920

    传输层Stu

    概述和传输层服务 本章学习的重点: 理解传输层的工作原理 多路复用/解复用 可靠数据传输 流量控制 (发送方和接收方的问题) 拥塞控制 学习Internet的传输层协议 UDP:无连接传输 TCP...:面向连接的可靠传输 TCP的拥塞控制 传输服务和相关协议 ** 为运行在不同主机上的应 用进程提供逻辑通信 ** ** 传输协议运行在端系统 ** 发送方:将应用层的报 文分成报文段,然后传 递给网络层...接收方:将报文段重组 成报文,然后传递给应 用层 ** 有多个传输层协议可供应 用选择 ** Internet: TCP 和 UDP 传输层和网络层比较 网络层服务: 主机之间的逻辑通信 传输层服务...: 进程之间的逻辑通信 依赖于网络层的服务 并对网络层的服务进行 增强 Internet传输层协议 传输层向上层应用进程提供逻辑的通信服务 在物理上就是通过层间接口传给传输层,由传输层之间的相互配合...文段 每个报文段有一个源端口号和 目标端口号 (特定应用有著名的端口号) ip之间的传输说的是主机之间的信息传输, 如果想要实现进程之间的信息传输就需要加上端口号(port) TCP绑定的是四元组的信息

    33510

    传输层协议

    TCP 和 UDP 是两种最为著名的传输层协议,二者都使用 I P 作 为 网 络 层 协 议 尽管 TCP 和 UDP 都使用相同的网络层( IP ), TCP 却向应用层提供与 UDP 完全不同的服务...,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,UDP提供了无连接通信,适合于一次传输少量数据,UDP报文没有可靠性保证、顺序保证和流量控制字段等,可靠性较差...但是正因为UDP协议的控制选项较少,在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等。...也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付,Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。...3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

    85710

    【Linux网络】网络基础:传输层UDPTCP协议(一)

    前言:传输层协议,特别是用户数据报协议(UDP)和传输控制协议(TCP),是网络通信中最为基础也最为重要的部分。它们不仅决定了数据的传输方式,还影响着数据的可靠性、顺序性和实时性。...无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接 不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息 面向数据报:...调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作 UDP具有接收缓冲区....如果我们需要传输的数据超过64K , 分包, 多次发送并在接收端手动拼装 TCP协议 TCP(Transmission Control Protocol)即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议...在传输层协议的引领下,让我们携手前行,共创网络技术的辉煌未来。 希望本文能够为你提供有益的参考和启示,让我们一起在编程的道路上不断前行! 谢谢大家支持本篇到这里就结束了,祝大家天天开心!

    42610

    MongoDB网络传输层模块源码实现二

    本文为《MongoDB内核源码实现、性能调优、最佳运维实践系列》模块一:MongoDB网络传输层模块源码 第二篇,您可点击此处查看第一篇:MongoDB网络传输模块源码实现及性能调优实践-体验内核性能极致设计...说明 在之前的传输处理源码实现及性能调优-体验内核性能极致设计>>一文中分析了如何阅读百万级大工程源码、Asio网络库实现、transport传输层网络模块中线程模型实现,但是由于篇幅原因...,传输层网络模块中的以下模块实现原理没有分析,本文将继续分析遗留的以下子模块: transport_layer套接字处理及传输层管理子模块 session会话子模块 Ticket数据收发子模块 service_entry_point...服务入口点子模块 service_state_machine状态机子模块(该《模块在网络传输层模块源码实现三》中分析) service_executor线程模型子模块(该《模块在网络传输层模块源码实现四...》中分析) 2. transport_layer 套接字处理及传输层管理子模块 transport_layer套接字处理及传输层管理子模块功能包括套接字相关初始化处理、结合asio库实现异步accept

    1.6K20

    【Linux网络】网络基础:传输层TCP协议(二)

    TCP协议自1974年由Vint Cerf和Bob Kahn提出以来,经历了无数次的迭代与优化,逐渐成为互联网中最广泛使用的传输层协议之一。...时间会随着网络环境的不同,会有所不同 如果超时时间设的太长,会影响整体的重传效率 如果超时时间设的太短,有可能会频繁发送重复的包 TCP为了保证无论在任何环境下都能比较高性能的通信,因此会动态计算这个最大超时时间 Linux...状态 我们使用Ctrl-C终止了server,所以server是主动关闭连接的一方,在TIME_WAIT期间仍然不能再次监听同样的server端口 MSL在RFC1122中规定为两分钟,但是各操作系统的实现不同...粘包问题中的 “包” ,是指的应用层的数据包 在TCP的协议头中,没有如同UDP一样的 “报文长度” 这样的字段,但是有一个序号这样的字段 站在传输层的角度,TCP是一个一个报文过来的,按照序号排好序放在缓冲区中...通过本文的梳理, 我们从TCP的三次握手建立连接,到数据传输过程中的序列号与确认应答机制,再到滑动窗口实现的流量控制,以及慢启动、拥塞避免等策略,一步步揭示了TCP协议背后的智慧与精妙。

    47210

    网络层传输层(计算机网络传输层大题)

    概述 1.1 传输层的意义 传输层的由来 有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。...“传输层”的功能,就是建立”端口到端口”的通信。相比之下,”网络层”的功能是建立”主机到主机”的通信。只要确定主机和端口,我们就能实现程序之间的交流。...网络层可以把数据从一个主机传送到另一个主机,但是没有和进程建立联系;传输层就是讲进程和收到的数据联系到一起,使数据能够为应用服务 所以说传输层是主机才有的层次 1.2 传输层的两个协议 1.3...UDP将可靠传输的实现放到了应用层,然后类似于TCP,实现确认机制,重传机制 UDP不属于连接型协议,因而具有消耗资源小,处理速度快等优点,所以通常音频、视频通话在传送时使用UDP比较多,因为它们即使丢失一两个数据包也不会对结果产生太大影响...UDP传输层无法保证数据的可靠传输,只能通过应用层来实现了;实现的方式可以参考TCP可靠传输的方式,只是实现不在传输层,转移到了应用层 目前有如下开源程序利用UDP实现了可靠的数据传输;分别有RUDP

    84230

    传输层协议——UDP

    ftp服务器, 使用21端口 telnet服务器,使用23端口 http服务器, 使用80端口 https服务器, 使用443端口 0-1023: 知名端口号,HTTP、FTP、SSH应用层协议...UDP协议 UDP协议端格式 有效载荷一定是上层——应用层 给的,上层通过系统调用 把数据拷过来的 UDP报头的宽度是0-31,表示报头所对应的字节数 (4字节) 1. 报头和有效载荷如何分离?...UDP报头中包含16位目的端口号,将一个报文发送到主机上,根据目的端口号向上交付给应用层,绑定该端口号的进程 报头(协议)的本质:结构化数据 基于 struct 有两种数据类型,一种为结构体,另一种为位段...struct udp_header 结构体 内部 包含 源端口号、目的端口号 、udp长度、校验和 借助位段的方式,取整形int的4字节中的16个比特位 将缓冲区数据从应用层拷贝给操作系统内部...s,,让s+8,再次指向有效载荷 将s强转成 struct udp_header类型 ,指向结构体中的源端口号、目的端口号 、udp长度、校验和 UDP的特点 无连接:知道 对端的IP和端口号 就直接传输

    49910

    传输层:TCP协议

    传输层中有两个重要的协议:TCP协议和UDP协议。本博文分享的是TCP协议,不仅分享其协议格式,特点等等,还有应答机制、超时传送机制、连接管理机制、滑动窗口、阻塞控制等等。...粘包问题 首先要明确, 粘包问题中的 "包" , 是指的应用层的数据包,在TCP的协议头中, 没有如同UDP一样的 "报文长度" 这样的字段, 但是有一个序号这样的字段,站在传输层的角度, TCP是一个一个报文过来的...用UDP实现可靠传输 这个问题其实很好回答,我们想想TCP的可靠性是怎么样去实现可靠的,不就是有序列化,保证数据传输有顺序,有确认应答,保证数据被接收,有超时重传,让丢包的数据重新发送,有滑动窗口流量控制...那么,要是UDP想要实现可靠传输,我们可以引入序列号、确认序号、超时重传等等。...这是因为, Linux内核协议栈为一个tcp连接管理使用两个队列: 1. 半链接队列(用来保存处于SYN_SENT和SYN_RECV状态的请求)。 2.

    1.1K30
    领券