OSI七层网络模型、TCP三次握手四次分手及连接拒绝

本文深入解析了OSI七层网络模型、TCP三次握手及四次分手的过程,并探讨了连接拒绝的具体原因,包括如何通过查看发送和接收队列来诊断问题。
1 OSI七层网络模型

在这里插入图片描述

2 TCP三次握手

在这里插入图片描述
注意:tcp的三次握手和四次分手都是在内核空间完成的。

3 连接拒绝(connection refused)

仅讨论连接队列满了的情况,网络不通等情况造出的连接拒绝不在这次讨论范围。

服务端程序启动,会创建一个监听Socket,当客户端发送请求连接时,监听Socket会fork()出一个连接Socket与客户端建立连接。当客户端与服务端完成tcp三次握手之后,会将连接放入accept queue 中,应用服务负责消费连接。

当 “已建立成功(状态为ESTABLISHED),但,尚未交付给应用的” tcp连接的数量 ,即 RECV-Q 的数量超过 SEND-Q+1 的时候,新来的连接会被拒绝(connection refused)

3.1 查看发送和请求队列

netstat -antp命令
在这里插入图片描述
ss -ln
在这里插入图片描述

3.2关于SEND-Q 和 RECV-Q 解释
3.2.1 :Established时

netstat和ss
Recv-Q:“OS持有的,尚未交付给应用的 数据的 字节数”
Send-Q:“已经发送给对端应用,但,对端应用尚未ack的 字节数。此时,这些数据依然要由OS持有”

3.2.2 :Listen时

ss的Recv-Q:“已建立成功(状态为ESTABLISHED),但,尚未交付给应用的” tcp连接的数量。
该值最大为:Send-Q+1,即:min(backlog, somaxconn)+1。
之所以加1,是因为OS内核在判断队列是否已满时,用的是>(应该用>=),这导致当已创建成功的连接数量正好等于min(backlog, somaxconn)时,还会再多创建一个tcp连接,最终结果就是:min(backlog, somaxconn)+1

ss的Send-Q:listen时,backlog的大小。其值为min(backlog, somaxconn)

netstat的Recv-Q :含义同ss的Recv-Q

netstat的Send-Q: 尽管文档中说是"Since Kernel 2.6.18 this column contains the maximum size of the syn backlog",但,实验中看不出来
参考:https://blog.youkuaiyun.com/iceman1952/article/details/109014798

4 TCP四次分手

在这里插入图片描述

4.1 TIME-WAIT为什么等待2个包的时间:

防止丢包。当发送ACK之后,等待是否还有FIN发送过来,如果没有了,就说明正常收到ACK了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值