TCPIP
文章平均质量分 94
zhouguoqionghai
这个作者很懒,什么都没留下…
展开
-
blocking socket 读写返回 EAGAIN
非阻塞的 socket 读写操作返回 EAGAIN,表示当前已经读完内核缓冲区或者写满内核缓冲区,需要等待下一次 select/poll/epoll 事件到来时再操作。对于阻塞的 socket 读写操作,如果内核缓冲区是空,read 将一直阻塞;如果不能一下全部写入用户态缓冲区的所有数据,write 将阻塞。原以为对于阻塞的 socket,如果设置超时时间,读操作内核缓冲区为空或写操作内核缓冲区已满,返回的是 ETIMEDOUT,原来返回的也是 EAGAIN.内核缓冲区还有 4 个字节的剩余空间,那原创 2020-05-27 12:51:37 · 856 阅读 · 1 评论 -
LISTEN 状态的 Recv-Q Send-Q
ESTAB 状态下的 Recv-Q Send-Q 分别表示内核协议栈的发送缓冲区和接受缓冲区中保存的内容字节数。在 Linux 上,TCP 的三次握手在内核里完成。内核通过一个半连接和已连接 2 个队列来实现。已连接队列的大小由 net.core.somaxconn 和 int listen(int sockfd, int backlog) 传入的 backlog 较小值来决定。对于 LI...原创 2020-04-21 14:17:58 · 2223 阅读 · 0 评论 -
A Deep Dive into Iptables and Netfilter Architecture(深入理解 iptables 和 netfilter 架构)
SVG 图看这里。重点标红:连接收到的应答包会自动应用反方向的 NAT 规则。IntroductionFirewalls are an important tool that can be configured to protect your servers and infrastructure. In the Linux ecosystem, iptables is a w...转载 2020-01-16 12:00:54 · 876 阅读 · 0 评论 -
Wireshark 提示 TCP segment of a reassembled PDU
It means that Wireshark thinks the packet in question contains part of a packet (PDU - "Protocol Data Unit") for a protocol that runs on top of TCP.If the reassembly is successful, the TCP segment c...原创 2019-12-03 12:12:02 · 1444 阅读 · 0 评论 -
Linux socket 关闭场景
测试环境 :[root@centos192.168.1.12 ~]# cat /etc/system-releaseCentOS release 6.9 (Final)工具:服务器 192.168.1.12 ipython Python 2.7.5客户端 192.168.1.119 Jupyter QtConsole python3.6.1测试经过:为了测试效果,将服务器...原创 2019-03-20 17:45:02 · 2167 阅读 · 0 评论 -
SO_LINGER on Sockets On different platform
前边博客讨论了 socket 在 Linux 下的关闭场景,这篇文章实验了更多的平台,转载在这里。Cross-Platform Testing of SO_LINGERIntroductionIn this post we look at the effects of setting SO_LINGER on various different platforms. We assume...转载 2019-03-20 23:25:28 · 570 阅读 · 0 评论 -
python socket 超时设置
python socket 提供 settimeout 设置阻塞 IO 的超时时间,一旦超时,抛出 timeout 异常。不过这样,接收与发送的超时时间都被设置为相同了。如果需要接收与发送设置不同的超时时间,需要利用 socket 选项 SO_RCVTIMEO 和 SO_SNDTIMEO 来实现。Linux 下,选项的参数值为 timeval,两个字段表示秒与微妙,都是 64 位整数。s...原创 2019-06-14 21:55:57 · 20664 阅读 · 1 评论 -
EPOLLRDHUP vs EPOLLHUP
EPOLLRDHUP 表示读关闭。不是所有的内核版本都支持,没有查证。有两种场景:1、对端发送 FIN (对端调用close 或者 shutdown(SHUT_WR)).2、本端调用 shutdown(SHUT_RD). 当然,关闭 SHUT_RD 的场景很少。测试环境为 Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP.........原创 2019-07-03 22:43:10 · 14720 阅读 · 1 评论 -
TCP 带外数据传输 OOB 数据完全解析
带外数据说明TCP 的带外数据可传输一字节内容,实际上带外数据和其他数据是一起发送,一起接收。区别在于:对于发送端:发送带外数据,会将当前发送缓冲区待发送的 TCP 报文 header 设置 flag 的 URG 标志和紧急指针 Urgent pointer 的值,仅仅如此而已。带外数据的位置为该次发送带外数据调用的最后一个字节。对于接收端:接收端,则是读取接口的行为的差异...原创 2018-09-07 00:59:52 · 3122 阅读 · 0 评论 -
Mysql localhost 与 127.0.0.1的区别
收集自网络MySQL主机127.0.0.1与localhost区别:1、localhost也叫local ,正确的解释是:本地服务器127.0.0.1在windows等系统的正确解释是:本机地址(本机服务器)他们的解析通过本机的host文件,windows自动将localhost解析为127.0.0.1,所以其实在 Windows 上是没有区别的。原创 2017-08-01 10:51:03 · 2390 阅读 · 0 评论 -
TCP 连接和状态说明
理论上来说,确定一条链路,只要四元组(源IP、源端口号、目的 IP、目的端口号)。而计算机之间的通信链路都是通过 socket 来建立的,socket 本身是传输层的一个抽象,为应用层之间的网络通信提供接口。所以只要这五元组中的一个不同,就可以创建不同的socket / 连接。传输层头部表示端口号的字段为 2 个字节,所以对应一台单机服务器,比如 http 服务器,自身的 ip 地址固定了,使用的原创 2017-06-27 17:16:36 · 2171 阅读 · 0 评论 -
firewall-cmd 下规则控制与现象
使用 nc -v 地址 端口号 连接服务器,返回:(tcp) failed: No route to host使用 ss -apn | grep 端口发现该端口确实处于侦听状态。在防火墙开放端口:firewall-cmd --zone=public --add-port=端口/tcp --permanent重启防火墙:systemctl restart firewalld...原创 2018-06-28 15:40:08 · 5210 阅读 · 0 评论 -
lsof: can't identify protocol 问题
socket 泄露原创 2018-07-18 15:42:28 · 1730 阅读 · 0 评论 -
iptables 端口转发
ssh 也能实现本机的端口转发,只不过原来的 1 条连接会变成 3 条。详情见前一篇 ssh 端口转发博文。而 iptables 的端口转发则是在内核进行。1、将本地的端口转发到本机端口将本机的 7777 端口转发到 6666 端口。iptables -t nat -A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 6666...原创 2018-08-22 17:32:24 · 74769 阅读 · 6 评论 -
SSH 端口转发玩转
ssh 端口转发需要配置 /etc/ssh/sshd_config 中tcp转发选项为开启:AllowTcpForwarding yes默认是开启被注释掉的,可以去掉注释保存之后重启 sshd 服务。service sshd restart (systemctl restart sshd).否则,来连接时,会出现 channel 3: open failed: administrat...原创 2018-08-20 13:48:41 · 33785 阅读 · 4 评论 -
The method to epoll’s madness
原文地址 https://medium.com/@copyconstruct/the-method-to-epolls-madness-d9d2d6378642My previous post covered the fundamentals of file descriptors as well as some of the most commonly used forms on non-b...转载 2018-09-05 13:28:10 · 748 阅读 · 0 评论 -
Linux IO 多路复用理解
1、复用的意思时不用每个进程/线程来操控单独的一个IO,只需一个进程/线程来操控多个IO.2、内核空间不能直接解引用用户态的指针。select 与 pollselect 传递 fd_set* 的指针,仍然需要将fd_set从用户态拷贝到内核态。poll 传递的 pollfd* 指针一样需要从用户态拷贝所有 pollfd 到内核态。( copy_from_user 方...原创 2018-09-08 18:38:24 · 9556 阅读 · 2 评论 -
WireShark 抓包问题集
在主机和虚拟机之间进行抓包联系,虚拟机的网卡设置为网桥模式,复制物理网络连接状态。发现每一个包都会重复,原因在于虚拟机使用是和物理机一样的同一块物理网卡,所以不同于两天实体机之间,相当于每个包在发送端和接收端都被抓取到,在我的机器上前后相差的时间在3 * 10 -6s 之内。对于重复的包,WireShark 有的标记为重传,有的标记为乱序。其实这两种标记的区别不大。Retransmit原创 2017-05-25 09:26:39 · 9061 阅读 · 0 评论