![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
TCP协议
文章平均质量分 59
库昊天
这个作者很懒,什么都没留下…
展开
-
Linux基础之网络包收发流程
网络包的接收流程网络数据包(Frame)到达网卡,按照FIFO顺序存入网卡的接受队列;网卡通过DMA方式将接受队列的数据拷贝到内核缓冲区sk_buffer;当数据拷贝完成后,网卡通过硬件中断(IRQ)通知CPU有新的网络数据到来,CPU执行驱动程序(NIC Driver)的处理逻辑:3.1 禁用网卡的中断。这样做的目的是避免CPU被频繁的中断,当网卡接收到新的数据时直接写内存就可以了,...原创 2019-12-16 15:19:14 · 2730 阅读 · 0 评论 -
TCP半连接队列和全连接队列
基本介绍半连接队列(syn queue)作用:TCP 三次握手中存储处于SYN_RECV状态的连接;最大长度:max(64, /proc/sys/net/ipv4/tcp_max_syn_backlog),syncookies = 0 时起效,syncookies = 1时将被忽略;全连接队列(accept queue)作用:TCP 三次握手中存储处于ESTABLISHED状态的...原创 2019-05-28 18:21:16 · 3862 阅读 · 0 评论 -
tcpdump实验分析
实验准备安装nc工具:yum install nc监听本地网卡流量:tcpdump -i lo -n -nn tcp port 8888建立TCP/UDP连接:nc -p 1234 10.96.78.213 8888数据包分析14:07:53.220954为时间戳,精确到微妙,加-t不显示时间;10.96.78.213.1234含义:10.96.78.213为IP,1234为端口...原创 2019-05-13 15:35:08 · 292 阅读 · 0 评论 -
tcpdump命令
功能:网络抓包工具; 使用方式:tcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ] [ -C file_size ] [ -F file ] [ -i interface ] [ -m module ] [ -M secret ] [ -r file ] [ -s s原创 2018-04-26 15:54:54 · 211 阅读 · 0 评论 -
Accept建立连接
三次握手过程服务端绑定和监听某个端口,创建SYN队列和ACCEPT队列;客户端调用connect()发起连接,发送SYN包到服务端,状态变为SYN_SEND;服务端监听到连接请求后,连接先被放入SYN队列(即未完成握手队列)中,同时返回SYN+ACK包给客户端,状态变为SYN_RCVD;客户端收到SYN+ACK包之后,状态变为ESTABLISHED,并发送ACK包到服务端;当服务端收到AC原创 2018-04-25 11:59:51 · 607 阅读 · 1 评论 -
TCP粘包和拆包
概念粘包:TCP层将应用层多个小的数据包封装成一个大的数据包发送出去;拆包:TCP层将应用层一个大的数据包拆分成多个小的数据包发送出去;原因 TCP层并不感知应用层数据包的具体含义,它会根据TCP缓冲区实际情况进行包的划分,所以对于应用层来说,一个完整的数据包可能会被TCP拆分成多个包进行发送,也可能被合并装成一个大的数据包发送。 解决方案 由于TCP不感知应用...原创 2018-05-02 19:18:42 · 208 阅读 · 0 评论 -
SO_SNDBUF和SO_RCVBUF
含义SO_SNDBUF:TCP发送缓冲区的容量上限;SO_RCVBUF:TCP接受缓冲区的容量上限;注意:缓冲区的上限不能无限大,如果超过内核设置的上限值,则以内核设置值为准(sysctl -a命令查看)。 net.ipv4.tcp_rmem = 8192 87380 16777216 net.ipv4.tcp_wmem = 8192 65536 16777216 ...转载 2018-04-24 21:08:12 · 17021 阅读 · 0 评论 -
Connection reset by peer原理解析
“Connection reset by peer”代表什么?“Connection reset by peer”表示当前服务器接受到了通信对端发送的TCP RST信号,即通信对端已经关闭了连接,通过RST信号希望接收方关闭连接。 The remote server has sent you a RST packet, which indicates an immediate dropping原创 2018-04-02 20:25:02 · 29313 阅读 · 0 评论 -
TCP的状态机
TCP的状态机原创 2018-01-20 19:58:34 · 258 阅读 · 0 评论 -
Netty之TCP参数设置
TCP_NODELAY 解释:是否启用Nagle算法,改算法将小的碎片数据连接成更大的报文来最小化所发送的报文的数量。 使用建议:如果需要发送一些较小的报文,则需要禁用该算法,从而最小化报文传输延时。只有在网络通信非常大时(通常指已经到100k+/秒了),设置为false会有些许优势,因此建议大部分情况下均应设置为true。SO_LINGER 解释: Socket参数,关原创 2018-01-28 12:13:24 · 12268 阅读 · 0 评论 -
TCP连接大量CLOSE_WAIT状态问题排查
CLOSE_WAIT产生原因 close_wait是被动关闭连接是形成的,根据TCP状态机,服务器端收到客户端发送的FIN,TCP协议栈会自动发送ACK,链接进入close_wait状态。但如果服务器端不执行socket的close()操作,状态就不能由close_wait迁移到last_ack,则系统中会存在很多close_wait状态的连接,如下图所示: 可能的原因如下:关闭...原创 2018-01-18 13:48:30 · 6073 阅读 · 0 评论 -
TCP连接大量TIME_WAIT状态问题排查
TIME_WAIT连接过多TIME_WAIT的产生 TIMEWAIT是主动关闭的一方,在使用FIN|ACK|FIN|ACK四分组正常关闭TCP连接时产生的。TIMEWAIT状态本身和应用层的客户端或者服务器是没有关系的。服务器在处理客户端请求的时候,如果你的程序设计为服务器主动关闭,那么你才有可能需要关注这个TIMEWAIT状态过多的问题。如果你的服务器设计为被动关闭,那么你首先要关原创 2018-01-17 19:14:41 · 3291 阅读 · 0 评论 -
TCP协议之RST与FIN
FIN 如下图所示,FIN表示正常关闭连接,没有数据丢失,缓冲区所有数据包都发送完成才会发送FIN包,这与RST不同。 RST RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。发送RST包关闭连接时,不必等缓冲区的包都发出去,直接就丢弃缓存区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。原创 2018-02-01 10:21:18 · 10697 阅读 · 0 评论 -
心跳机制详解
什么是心跳机制? 发送方按照一定规则(周期性发送、空闲发送等等)向接收方发送固定格式的消息,接受方收到消息后回复一个固定格式的消息,如果长时间没有收到,比如心跳周期的3倍,则认为当前连接失效,将其断开。 注:发送方可以是客户端或者服务端,根据实际情况而定,常见是客户端作为发送方。应用场景 判断长连接是否存活:当长连接没有流量时,无法判断是通信异常引起还是通信正常没有业务流量引起,通过发送心跳包原创 2017-11-06 18:44:53 · 5953 阅读 · 0 评论 -
SSL/TLS协议
简介 SSL(Server Socket Layer)是Netscape公司提出一种保证网络上的两个节点进行安全通信的协议。后来IETF对SSL作了标准化,称为TLS(Transport Layer Security)。从技术上讲,目前TLS 1.0与TLS 3.0的差别非常微小。SSL\TLS协议两个重要作用:数据加密和身份认证。数据加密 SSL\TLS协议在TCP\IP协议中的位置如下图所示原创 2017-11-17 19:31:27 · 341 阅读 · 0 评论 -
TCP之连接管理
三次握手和四次挥手 TCP通信过程包括三个步骤:建立TCP连接通道(三次握手)、数据传输和断开TCP连接通道(四次挥手),如下图所示: TIME_WAIT状态: 指Active Opener在关闭连接前要等待2MSL的时间。 TIME_WAIT主要有两个作用:一个是给active closer重新发送ACK报文的机会;另外一个作用则是同一个四元组(源ip、源端口、目的IP、目的端口原创 2017-09-14 09:42:58 · 468 阅读 · 0 评论