首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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接口.

5.4K30

Linux网络】TCP协议

引言 TCP协议是传输层中非常重要协议。本篇博客我们将从TCP头部信息、TCP状态转移、TCP数据流、TCP数据流控制等等方面来讨论! 在TCP协议中,通信双方地位是平等。...1、TCP协议特点 传输层中我们常用协议有两个:TCP协议和UDP协议。TCP协议相对于UDP协议特点是:面向连接、可靠、面向字节流。...当TCP模块真正开始发送数据时,发送缓冲区中这些等待发送数据可能被封装成一个或者多个TCP报文发出去,因此,TCP模块发送出TCP报文段个数和应用程序执行写操作次数没有固定数量关系。...当接收缓冲区收到一个或者多个TCP报文后,TCP模块将它们携带应用程序数据按照TCP报文序号【见下文】依次放入TCP接收缓冲区中,并通知应用程序读取数据。...Linux中(BSD Unix和Windows也是如此), 超时以500ms为一个单位进行控制, 每次判定超时重发超时 时间都是500ms整数倍.

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

    Linux TCP RST情况

    可以看到握手时会在客户端和服务器之间传递一些TCP头信息,比如ACK标志、SYN标志以及挥手时FIN标志等。...除了以上这些常见标志头信息,还有另外一些标志头信息,比如推标志PSH、复位标志RST等。其中复位标志RST作用就是“复位相应TCP连接”。...原因在于Socket.close()方法语义和TCP“FIN”标志语义不一样:发送TCP“FIN”标志表示我不再发送数据了,而Socket.close()表示我不在发送也不接受数据了。...然后是客户端和服务器统一使用TCP长连接:客户端使用TCP长连接很容易配置(直接设置HttpClient就好),而服务器配置长连接就比较麻烦了,就拿tomcat来说,需要设置tomcatmaxKeepAliveRequests...使用长连接可以避免每次建立TCP连接三次握手而节约一定时间,但是我这边由于是内网,客户端和服务器3次握手很快,大约只需1ms。

    5.9K10

    LinuxTCP测试工具

    如何在 Linux 上安装 tcpping 测量到远程主机网络延迟一种常用方法是使用ping应用程序。该ping工具依赖 ICMP ECHO 请求和回复数据包来测量远程主机往返延迟。...在这种情况下,你将需要依赖使用 TCP/UDP 数据包第 3 层测量工具,因为这些第 3 层数据包更有可能绕过常见防火墙规则。 一种这样第 3 层测量工具是tcpping....为了测量延迟,tcpping利用所谓半开放连接技术,基于 TCP 三路握手。也就是说,它通过端口号(默认为 80)向远程主机发送 TCP SYN 数据包。...RepoForge,然后运行: $ sudo yum install tcptraceroute 安装依赖 bc 使用另一个工具tcpping是GNUbc,它预装在所有主要 Linux 发行版上...在Debian Linux 上安装: $ sudo apt-get install bc 在 Red Hat Linux 上安装: $ sudo yum install bc 安装 tcpping

    5.6K20

    linux tcptimewait如何解决

    大家好,又见面了,我是你们朋友全栈君。 开头 本文从内核角度看timewait是如何解决。贴代码,和网上看到挺多冲突!...1. timewait是什么 timewait在tcp结束后主动关闭一方等待时候行为。图片中服务和客户端描述不是非常准确,这里客户端是主动关闭一方。...2. timewait在客户端问题 这里客户端,不是四次握手客户端,而是指发起tcp请求一方。...发起一方需要绑定本地端口,本地端口绑定方式非常暴力:直接是从配置偶数值开始遍历查找可用端口:(偶数端口和奇数端口内核一个patch) 在占用端口中,查看是否可以回收利用:如果可以回收,则返回;如果不能...tcp_send_ack(sk); tcp_time_wait(sk, TCP_TIME_WAIT, 0); break; } struct inet_timewait_sock *inet_twsk_alloc

    2K10

    linux源码看socket(tcp)timeout

    linux源码看socket(tcp)timeout 前言 网络编程中超时时间是一个重要但又容易被忽略问题,对其设置需要仔细斟酌。...本文大部分讨论是socket设置为block情况,即setNonblock(false),仅在最后提及了nonblock socket(本文基于linux 2.6.32-431内核)。...kernel代码版本细微变化 值得注意是,linux本身官方发布2.6.32源码对于tcp_syn_retries2解释和RFC并不一致(至少笔者阅读代码如此,这个细微变化困扰了笔者好久,笔者下载了和机器对应内核版本后才发现代码改了...在timeout>0时,将socket设置为非阻塞,然后用select系统调用去模拟超时,而没有走linux本身超时逻辑,如下图所示: ?...javaSocketInputStreamsockRead0超时时间 java超时时间由SO_TIMOUT决定,而linuxsocket并没有这个选项。

    4.7K20

    Linux源码看Socket(TCP)accept

    今天笔者就从Linux源码角度看下Server端Socket在进行Accept时候到底做了哪些事情(基于Linux 3.10内核)。...在这里,我们直接给出TCP Socket所对应ops也就是操作函数。 accept系统调用 好了,我们直接进入accept系统调用吧。...理解accept关键点是,它会创建一个新Socket,这个新Socket来与对端运行connect()对等Socket进行连接,如下图所示: 接下来,我们就进入Linux内核源码栈吧 accept...,可以见笔者另一篇博客详细分析 《从Linux源码看Socket(TCP)listen及连接队列》: https://www.cnblogs.com/alchemystar/p/13845081.html...总结 Linux内核源码博大精深,每次扎进去探索时候都会废寝忘食,其间可以看到各种优雅设计,在此分享出来,希望对读者有所帮助。

    1.8K00

    linux源码看socket(tcp)timeout

    本文大部分讨论是socket设置为block情况,即setNonblock(false),仅在最后提及了nonblock socket(本文基于linux 2.6.32-431内核)。...kernel代码版本细微变化 值得注意是,linux本身官方发布2.6.32源码对于tcp_syn_retries2解释和RFC并不一致(至少笔者阅读代码如此,这个细微变化困扰了笔者好久,笔者下载了和机器对应内核版本后才发现代码改了...以下为代码对比: ========================>linux 内核版本2.6.32-431<======================== #define TCP_TIMEOUT_INIT...在timeout>0时,将socket设置为非阻塞,然后用select系统调用去模拟超时,而没有走linux本身超时逻辑,如下图所示: 由于没有java并没有设置so_sndtimeo选项,所以在...javaSocketInputStreamsockRead0超时时间 java超时时间由SO_TIMOUT决定,而linuxsocket并没有这个选项。

    2K20

    linux开启tcp_timestamps和tcp_tw_recycle引发问题研究

    正常TCP TIME_WATI时长为2MSL,用于挥手阶段最后一个ACK报文重传,以及防止当前连接上滞留报文影响到下一个连接。...当启用tcp_tw_recycle后,系统会在一个RTO极短时间内回收处于TIME_WAIT状态socket,但仍然无法杜绝接收到上一个连接在链路上滞留报文。...为了防止这种情况发生,在启用tcp_tw_recycle情况下,由于已经释放了socket,系统无法使用socket来标记一条连接,只能退而求其次,通过判断对端IP发过来报文时间戳来判断该报文是新产生还是老报文...因此复现场景为:服务端主动断开与客户端一条连接,在后续TCP_PAWS_MSL(60s)时间内,如果客户端发过来SYN报文TSVal时间戳小于系统保留上一个连接时间戳,则该SYN报文会被丢弃...和tcp_tw_recycle可能会导致客户端连接不上前提条件是server主动断开过与客户端连接(可能是服务重启等原因),导致server处于TIME_WAIT状态socket被快速回收,如果在TCP_PAWS_MSL

    2.3K20

    LinuxTCP几个内核参数调优

    Linux作为一个强大操作系统,提供了一系列内核参数供我们进行调优。光TCP调优参数就有50多个。在和线上问题斗智斗勇过程中,笔者积累了一些在内网环境应该进行调优参数。...即在tcp_timestamps开启(Linux默认开启),tcp_tw_recycle会经常导致下面这种现象。 ?...但在某个版本之后Linux内核仅仅用这个tcp_retries2来计算超时时间,在这段时间重传次数纯粹由RTO等环境因素决定,重传超时时间在5/15下表现为: tcp_retries2 对端无响应...tcp_slow_start_after_idle 还有一个可能需要调整参数是tcp_slow_start_after_idle,Linux默认是1,即开启状态。...Linux 新版本 /* TCP initial congestion window */ #define TCP_INIT_CWND 10 总结 Linux提供了一大堆内参参数供我们进行调优,其默认设置参数在很多情况下并不是最佳实践

    6.2K294

    Linux 2.6.16 TCP 连接速度异常问题分析

    分析认为SESU10母盘上内核TCP拥塞控制算法和WindowsAck频率控制策略存在不兼容情况。...这里是一个典型下载速度曲线: 我们服务器曲线:(纵轴单位:包/s) 百度服务器下载曲线: 重现该问题测试环境: 网络: 公司体验网,普通联通4M ADSL 服务器:Linux64位服务器...Linux这一端,首先怀疑和nagle算法有关系,在nws服务器上设置TCP_NODELAY以后仍然可以重现,可以排除Nagle算法影响。...因为每次linux仅发送一个数据包,因此怀疑拥塞窗口问题,推测问题如下: 初始情况下,客户端回复一个ACK时,拥塞窗口增大,每次发送多个数据包,因此刚开始可以有较快传输速度;因为网络延时抖动或丢包导致服务器协议栈判定数据包超时...通过测试增大初始拥塞窗口为10 (更换内核加载架平新技术组TCP优化模块实现),下载速度恢复正常。

    4.8K00

    Linux TCP 状态 TIME_WAIT 过多处理

    那么可以这么理解,当client进入time_wait等待时间是2个MSL 让我们看一下一台linux服务器网络状态: # netstat -an | awk '/^tcp/ {++State[$NF...略显偏高, 也就是说大量关闭操作在等待2个MSL后结束,正常我们tcp 端口是65535个,如果并发再高一些,可能会大量socket不能及时被释放,从而导致性能下降,所以我们可以通过linux内核进行一些网络调整比如...允许将TIME-WAIT sockets重新用于新TCP连接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets快速回收...连接过多问题,可以通过激活tcp_tw_reuse来缓解。...net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用时候,TCP发送keepalive消息频度。缺省是2小时,改为20分钟。

    2.2K30

    LinuxTCP几个内核参数调优

    Linux作为一个强大操作系统,提供了一系列内核参数供我们进行调优。光TCP调优参数就有50多个。在和线上问题斗智斗勇过程中,笔者积累了一些在内网环境应该进行调优参数。...即在tcp_timestamps开启(Linux默认开启),tcp_tw_recycle会经常导致下面这种现象。...但在某个版本之后Linux内核仅仅用这个tcp_retries2来计算超时时间,在这段时间重传次数纯粹由RTO等环境因素决定,重传超时时间在5/15下表现为: tcp_retries2 对端无响应...tcp_slow_start_after_idle 还有一个可能需要调整参数是tcp_slow_start_after_idle,Linux默认是1,即开启状态。...echo 0 > /proc/sys/net/ipv4/tcp_slow_start_after_idle 当然了,Linux启用这个参数也是有理由,如果我们网络情况是时刻在变化,例如拿个手机到处移动

    4.5K10

    Linux TCP状态TIME_WAIT 过多处理

    那么可以这么理解,当client进入time_wait等待时间是2个MSL 让我们看一下一台linux服务器网络状态: # netstat -an | awk '/^tcp/ {++State[$NF...略显偏高, 也就是说大量关闭操作在等待2个MSL后结束,正常我们tcp 端口是65535个,如果并发再高一些,可能会大量socket不能及时被释放,从而导致性能下降,所以我们可以通过linux内核进行一些网络调整比如...允许将TIME-WAIT sockets重新用于新TCP连接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets快速回收...连接过多问题,可以通过激活tcp_tw_reuse来缓解。...net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用时候,TCP发送keepalive消息频度。缺省是2小时,改为20分钟。

    1.2K20

    Linux - lsof显示 tcp,udp 端口和进程

    文章目录 功能 语法 示例 lsof -i 显示 tcp,udp 端口和进程等相关 查看服务器 80 端口占用情况 使用 -p 查看指定进程打开文件 更多命令 功能 lsof(list open...语法 语法格式:lsof -i:端口号 ---- 示例 lsof -i 显示 tcp,udp 端口和进程等相关 [root@VM-24-3-centos ~]# lsof -i |more COMMAND...111507996 0t0 TCP *:http (LISTEN) [root@VM-24-3-centos ~]# COMMAND:进程名称 PID进程标识符 USER:进程所有者 FD...:80 查看TCP协议80端口占用情况 lsof -c lsof 查看lsof命令使用所有文件 lsof -p 1234:列出进程号为1234进程所打开文件 lsof -g gid:显示归属gid...进程情况 lsof +d /usr/local/:显示目录下被进程开启文件 lsof +D /usr/local/:同上,但是会搜索目录下目录,时间较长 lsof -d 4:显示使用fd为4进程

    3.1K20
    领券