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

Linux网络编程TCP

TCP/IP协议 TCP/IP 协议栈是一系列网络协议(protocol)的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。...OSI 7层模型和TCP/IP四层网络模型对应关系 计算机网路基础的知识不过多讲解,主要是让大家明白接下来的Linux网络编程数据流属于那一层,具体如下图 TCP/IP协议数据流示意图 我们接下来讲解的...Linux网络编程Tcp协议是属于传输层的协议 Linux Socket 网络编程 TCP协议 TCP是面向连接的可靠的传输层协议。...TCP编程 Linux中的网络编程是通过socket接口来进行的。socket是一种特殊的I/O接口,它也是一种文件描述符。常用于不同机器上的进程之间的通信,当然也可以实现本地机器上的进程之间通信。...使用TCP协议的流程图 根据流程图逐一讲解API接口.

6.5K30

【Linux网络】TCP协议

完成数据交换后,通信双方必须断开连接,同时释放连接所占用的网络资源。 在讲它们的区别之前,我们需要了解一下TCP协议全双工的特点 TCP协议属于传输层中的协议,传输层由操作系统管理。...3、超时重传机制 对于超过时间限制但未收到应答的报文,TCP协议会重新传输;这也就决定了对已经发送到网络中的数据报的数据,我们不能立即丢弃,应该再保存一段时间,以防报文在传输过程中出现数据丢失的情况。...Linux中(BSD Unix和Windows也是如此), 超时以500ms为一个单位进行控制, 每次判定超时重发的超时 时间都是500ms的整数倍....累计到一定的重传次数, TCP认为网络或者对端主机出现异常, 强制关闭连接 4、TCP报头结构 1、16位端口号 告知主机该报文来着哪里【16位源端口号】以及要交给上层哪一个协议或者应用程序【16...原因是 在网络中可能来自发送方发来的数据报,然后接收方要给对方一个响应. 这样报文一来一回的时间就是2MSL.

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

    Linux网络UDP与TCP

    Linux 中(BSD Unix 和 Windows 也是如此), 超时以 500ms 为一个单位进行控制, 每次判定超时重发的超时时间都是 500ms 的整数倍....(TCP就会判断网络出问题了,网络拥塞了) 这就是网络出了问题。硬件设备出问题(大量数据都超时了),数据量太大从而引起阻塞。 这个时候发送方该怎么办呢? 首先不能立即对报文进行重发。...因为都用TCP协议实现了多主机面对拥塞时是由共识的,所以一旦发生网络拥塞,所有的主机都会执行等一等或者少量发送数据,直到网络不堵塞为止。 拥塞控制策略 注意:每台识别堵塞的机器都要做。...; 当 TCP 通信开始后, 网络吞吐量会逐渐上升; 随着网络发生拥堵, 吞吐量会立刻下降; 拥塞控制, 归根结底是 TCP 协议想尽可能快的把数据传输给对方, 但是又要避免给网络造成太大压力的折中方案...几乎所有策略都是在双方机器上实现的,如果网络通道出了问题,TCP也会考虑的。

    71210

    【Linux网络】Socket编程:TCP网络编程

    在前面的文章中,我们使用了UDP进行网络编程,这篇文章我们就来使用另一个TCP进行网络编程,我们知道UDP和TCP都是传输层协议,但是特点不同,前者无连接,不可靠传输,面向数据报,后者有连接,可靠传输...USAGE_ERR); } uint16_t port = std::stoi(argv[1]); Enable_Console_Log_Strategy(); // 网络服务器对象提供网络通信功能...TCP 的工作方式:为什么需要 listen TCP的通信过程就像打电话,有一套严格的礼仪。 服务器准备接听:服务器启动后,它不知道谁会打来电话。...注意:这里涉及到的三次握手等,我们后面在介绍传输层TCP协议时会详细介绍这些相关内容,目前我们暂只需要学会TCP网络编程的相关系统调用,后续会慢慢介绍其它 UDP 的工作方式:为什么不需要 listen...如何设置: 可以设置为 SOMAXCONN(定义在 sys/socket.h 中),让系统使用一个默认的、相对较大的合理值(在Linux上,通常可以通过 /proc/sys/net/core/somaxconn

    16910

    【Linux网络】Linux网络编程套接字,UDP与TCP

    而Linux,作为开源操作系统的典范,其强大的网络功能和灵活性,为开发者们提供了一个广阔而深入的实践平台。...本文旨在深入探讨Linux环境下,如何通过套接字编程技术,驾驭UDP与TCP这两种强大的网络传输协议,从零开始构建基础的网络通信能力。...让我们一同踏上这段探索之旅,揭开Linux网络编程的神秘面纱,领略UDP与TCP的魅力所在,共同构建更加智能、互联的世界! 1....总结 在探索Linux网络编程的浩瀚领域中,UDP与TCP作为两大核心协议,不仅构建了互联网通信的基石,也成为了每一位网络开发者必须掌握的利器。...在结束这篇文章之际,愿每一位读者都能在网络编程的世界里找到自己的位置,用代码编织梦想,用技术照亮未来。让我们携手前行,在Linux网络编程的广阔天地中,共同书写属于我们的辉煌篇章!

    1.2K10

    Linux网络编程:TCP初体验

    =std::make_unique(); tcp_ptr->InitServer(); tcp_ptr->Start(); return 0; } 可以看见我们这里是没有定义一个默认的...那么我们的TCP他所做的初始化工作又是什么呢? 获取套接字 自然也是要先获取套接字也就是文件描述符信息。...所用到的调用接口是一样的,也是socket,只是在参数上可能会有所改变: 第一个参数是协议族,指定套接字使用的网络协议栈类型。我们这里不做改变仍然是IPv4通信,所以还是使用AF_INET。...我们如何理解网络? 至此,我们的服务端就可以进行一个基础的任务了。 但是,仍然存在许多安全隐患,这些我会后面提到。 我们先写一个客户端,来测试一下代码再说。...=std::make_unique(); tcp_ptr->InitClient(); tcp_ptr->Start(); return 0; } 进程阻塞的问题

    21410

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

    TCP为了保证无论在任何环境下都能比较高性能的通信,因此会动态计算这个最大超时时间 Linux中(BSD Unix和Windows也是如此),超时以500ms为一个单位进行控制, 每次判定超时重发的超时时间都是...在不清楚当前网络状态下,贸然发送大量的数据,可能损失惨重,发生大面积丢包,发送方可能会判定网络出现问题,让大量数据进行重传,数据大量堆积进而造成网络瘫痪,TCP引入 慢启动 机制,先发少量的数据,探探路...开始启动的时候,慢启动阈值等于窗口最大值 在每次超时重发的时候,慢启动阈值会变成原来的一半,同时拥塞窗口置回1 少量的丢包,我们仅仅是触发超时重传,大量的丢包,我们就认为网络拥塞 当TCP通信开始后,网络吞吐量会逐渐上升...,随着网络发生拥堵,吞吐量会立刻下降 拥塞控制归根结底是TCP协议想尽可能快的把数据传输给对方,但是又要避免给网络造成太大压力 延迟应答 如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小...)这一互联网通信基石的征途中,我们不仅揭开了其复杂而精细机制的神秘面纱,更深刻理解了为何TCP能够成为现代网络通信中不可或缺的一部分。

    46810

    UDP&TCP Linux网络应用编程详解

    1.目标 暂时想不出什么好的应用场景, 目前想到目标就是实现让两个设备通过网络传输数据, 比如开发板和Linux主机之间传数据, 以后就可以实现开发板通过网络上报数据或者主机通过网络控制开发板。...此外,暂时不想关心具体的网络模型,更注重于网络相关函数的直接使用。 2.Linux网络编程基础 2.1 嵌套字 多个TCP连接或者多个应用程序进程 可能需要同一个TCP端口传输数据。...Linux中的网络编程正是通过Socket接口实现的,Socket是一种文件描述符。...这样的好处是传输的数据是可靠的,此外它是有连接的传输,大多数网络传输都是用的TCP。 3.1 TCP流程图 ? 3.2 TCP步骤分析## 程序分为服务器端和客户机端,先从服务器端开始分析。...参考资料: 博客:很全的linux网络编程技巧 王粉花. 2016. 嵌入式Linux编程与实践教程.北京: 科学出版社.

    6.3K20

    【Linux网络编程】TCP Echo Server的实现

    本文专栏:linux网络编程 本文的基础知识是基于上篇文章:UDP Echo Server的实现 传送门: 【Linux网络编程】UDP Echo Server的实现 -CSDN博客 一...) { // 网络转主机 _port = ntohs(_addr.sin_port); // 从网络中拿到的!...网络序列 // _ip = inet_ntoa(_addr.sin_addr); // 4字节网络风格的IP -> 点分十进制的字符串风格的IP char ipbuffer...在UDP服务中是没有监听连接这一步的,但是在TCP这里就需要建立连接了。 我们约定以下,当我们使用客户端连接服务端时,是需要 服务器端的IP和端口号的。...详解看上篇文章: 【Linux网络编程】UDP Echo Server的实现 -CSDN博客 建立连接(connect) 与服务器端建立连接。

    14810

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

    在Linux内核中的部分源代码如下: struct sk_buff{ struct sk_buff* next; struct sk_buff* prev; //…… //…… unsigned...如果使用TCP协议,移动一个TCP报头的大小,然后填充 TCP报头。当数据报从传输层交付到网络层时,data指针向上移动,然后再填充上对应的报头 ,依次类推。...Linux中(BSD Unix和Windows也是如此),超时以500ms为一个单位 进行控制,每次判定超时重发的超时时间都是500ms的整数倍。...累积到一定的重传次数,TCP认为网络或对端主机出现异常,强制关闭连接。 (4)流量控制 前面提到过,TCP有发送缓冲区和接受缓冲区。...在不清楚当前网络状态的前提下,贸然发送大量数据,是很有可能造成雪上加霜的。 TCP引入慢启动机制,先发送少量的数据,探探路,摸清当前的网络状况,再决定按照多大的速度传输数据。

    12710

    网络(TCP)

    - C语言中文网 (biancheng.net) 图解TCP四次握手断开连接 图解TCP四次握手断开连接 - C语言中文网 (biancheng.net) 图解TCP数据报结构以及三次握手(非常详细)...,将来是使用IPv4还是IPv6网络通信的,还是有叫本地通信也叫作域间通信,第二个参数是socket对应的类型,udp是面向用户数据报(SOCK_DGRAM),tcp是面向字节流的,第三个参数不用填,协议类型...和udp都不能绑定自己云服务器的公网IP ​ ​ 127.0.0.1可以 ​ ​ tcp中使用的网络转主机函数 inet_ntop ​ ​ inet_aton ​ ​ inet_pton ​ ​ 服务测试代码...会话在Linux系统中有多种用途,下面是几种常见的会话类型及其相关概念: 1. 登录会话(Login Session) 当用户通过登录界面(如终端或图形界面)登录到系统时,系统会为该用户创建一个会话。...进程会话(Process Session) 在Linux中,每个进程都有一个会话(Session),这个会话由session leader(会话领导进程)控制。

    46310

    【Linux网络】传输层协议TCP——一文彻底搞定TCP协议

    按量按需发送,必须知道对方的接收缓冲区中剩余空间的大小 1.5 标志位 我们来看一下内核中的tcp报头 // linux kernel include/linux/tcp.h struct tcphdr...累计到一定的重传次数,TCP认为网络或者对端主机出现异常,强制关闭连接 在Linux中,默认的最大重传次数由/proc/sys/net/ipv4/tcp_retries2决定,通常是15次。...struct sk_buff(通常简称为SKB)是Linux内核网络子系统中最核心的数据结构,它代表了内核中流通的网络数据包。...可以说,整个Linux网络协议栈就是围绕SKB的创建、传递、处理和销毁来构建的。...第6步:协议族的继承关系(struct sock-> 具体协议结构) 图中下方不同颜色的方框(inet_connection_sock, tcp_sock等)展示了Linux内核面向对象的设计思想。

    44310

    网络(TCP)

    - C语言中文网 (biancheng.net) 图解TCP四次握手断开连接 图解TCP四次握手断开连接 - C语言中文网 (biancheng.net) 图解TCP数据报结构以及三次握手(非常详细)...,将来是使用IPv4还是IPv6网络通信的,还是有叫本地通信也叫作域间通信,第二个参数是socket对应的类型,udp是面向用户数据报(SOCK_DGRAM),tcp是面向字节流的,第三个参数不用填,协议类型...和udp都不能绑定自己云服务器的公网IP 127.0.0.1可以 tcp中使用的网络转主机函数 inet_ntop inet_aton inet_pton 服务测试代码read write 写一个客户端...会话在Linux系统中有多种用途,下面是几种常见的会话类型及其相关概念: 1. 登录会话(Login Session) 当用户通过登录界面(如终端或图形界面)登录到系统时,系统会为该用户创建一个会话。...进程会话(Process Session) 在Linux中,每个进程都有一个会话(Session),这个会话由session leader(会话领导进程)控制。

    36810

    【TCP】网络原理

    互联网中,主流的是 TCP/IP 五层协议 5G/4G 上网,是有自己的协议栈,要比 TCP/IP 更复杂(能够把 TCP/IP 的一部分内容给包含进去了) 应用层 可以代表我们所编写的应用程序,只要应用程序里面用到了网络通信...TCP 能做的是:感知到数据是否丢失,如果丢包,就重新再发一次 此时需要通过应答报文来区分 收到应答报文,说明数据没丢包 没收到应答报文,就说明数据丢包了 网络传输是需要消耗时间的,这里的“没收到...——>网络发生了严重故障,大概率没法继续使用了 重传也不会无休止的进行,当重传达到一定次数之后,TCP 不会再重传,就认为这个连接已经挂了 先尝试进行“重置/复位连接”,发送一个特殊的数据包“复位报文...”,尝试和对方重新进行连接 如果网络这会恢复了,复位报文就会重置连接,使通信可以继续进行 如果网络还有严重问题,复位报文也没有得到回应,此时 TCP 就会单方面放弃连接(发送方释放掉之前接收方的相关信息...连接管理 建立连接:三次握手 断开连接:四次挥手 网络中的握手/挥手,就是发送不携带业务数据(没有载荷,只有报头)的数据包,但是能起到“打招呼”这样的效果。次数就是指网络通信的次数。

    28110

    网络编程—tcp

    通信模型 udp通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,"打电话"" 上去 二、tcp网络程序-客户端 tcp客户端 tcp客户端,并不是像之前一个段子:一个顾客去饭馆吃饭...('utf-8')) # 关闭套接字 tcp_client_socket.close() View Code 上去 三、tcp网络程序-服务器 tcp服务器 生活中的电话机 如果想让别人能更够打通咱们的电话获取相应服务的话...上去  七、TCP/IP协议(族) 早期的计算机网络,都是由各厂商自己规定一套协议,IBM、Apple和Microsoft都有各自的网络协议,互不兼容 为了把全世界的所有不同类型的计算机都连接起来,就必须规定一套全球通用的协议...因为互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协议,所以,大家把互联网的协议简称TCP/IP协议(族) 常用的网络协议如下图所示: ? ?...说明: 网际层也称为:网络层 网络接口层也称为:链路层 另外一套标准 ?

    98531

    TCP协议(网络)

    Linux中(BSD Unix和Windows也是如此), 超时以500ms为一个单位进行控制, 每次判定超时重发的超时 时间都是500ms的整数倍....累计到一定的重传次数, TCP认为网络或者对端主机出现异常, 强制关闭连接....因为网络上有很多的计算机, 可能当前的网络状态就已经比较拥堵. 在不清楚当前网络状态下, 贸然发送大量的数据, 是很有可能引起雪上加霜的...., 同时拥塞窗口置回1; 少量的丢包, 我们仅仅是触发超时重传; 大量的丢包, 我们就认为网络拥塞; 当TCP通信开始后, 网络吞吐量会逐渐上升; 随着网络发生拥堵, 吞吐量会立刻下降; 拥塞控制, 归根结底是...TCP协议想尽可能快的把数据传输给对方, 但是又要避免给网络造成太大压力的折中方案.

    66010

    Linux网络-------1.socket编程基础---(TCP-socket)

    1.tcp和udp的区别 UDP(User Datagram Protocol)和 TCP(Transmission Control Protocol)是两种最常用的传输层协议,它们在可靠性、连接方式、...拥塞控制 TCP:动态调整发送速率 通过 慢启动、拥塞避免 等算法避免网络过载。 公平性高,但可能降低突发流量的速度。 UDP:无拥塞控制 持续以固定速率发送数据,可能加剧网络拥堵。...混合使用:部分应用同时使用两者(如QUIC协议结合了UDP的速度和TCP的可靠性)。 2.tcp协议函数详细介绍 1.listen函数(初始化)-------这个基本上只在服务端设置!!..._port = ntohs(_addr.sin_port); // 从网络中拿到的!...网络序列 // _ip = inet_ntoa(_addr.sin_addr); // 4字节网络风格的IP -> 点分十进制的字符串风格的IP char ipbuffer

    33210

    Linux网络编程:TCP的远程多线程命令执行

    前言: 好久不见,最近忙于其他事情,就耽误了咱们的Linux的网络部分的学习。 今天咱们先来给之前所学的TCP的部分进行一个首尾工作,主要是给大家介绍一些函数与补充一下知识点。...一、前文补充 前面我们已经通过多线程,多进程,线程池的方式分别实现了一个我们的TCP的EchoServer,今天我们先借着之前的代码来继续学习。...我们之前在进行TCP的数据的读取写入的时候,用到的函数是大家之前见过的write与read函数。其实我们这里之所以用到他们,主要是为了帮助大家理解我们通过accept返回的文件描述符。...但是这个不完善是因为TCP的特点。还记得吗,TCP是面向字节流,UDP是面向数据报。 对于我们的UDP来说,每次传输数据都是把所有数据传输过去,而面向字节流不同。...->InitServer(); tcp_ptr->Start(); return 0; } 这个方法之前我们已经使用过很多次了。

    17410
    领券