TCP建立连接时三次握手中的一个疑问点
这种情况相当于A凭空收到一个syn ack包,A会回复一个rst过去使B停止。你可以用scapy构造一个包发送过去,然后抓包查看。也有可能一些系统不会回复rst,或者回复的rst到不了B,那么B会重传该synack包一定时间后不再重传
■网友
我的疑问是,B收不到来自A的确认,不会一直向A重复发送SYN报文段以表示自己同意建立连接吗?
回答:不会。B只是收到了SYN,也只是返回一个ACK+SYN给A,至于A是否返回ACK以完成三次握手,B就不管了。如果B长期收不到A的ACK,那么B会关闭这个尚未完全建立起来的连接。
既然这样,A是不是会发送某种报文通知B自己并没有建立连接呢?
回答:不会。A收到B的ACK+SYN之后什么也不做,就当没收到。
A究竟是怎么处理这种情况的呢?
回答:结合回答一,过了一段时间后,A和B都会把这个“连接”(尚未建立起来)关闭。
■网友
首先b不会一直发送syn+ack消息给a,tcp协议有超时和重试机制来保证。Linux下通过tcp_synack_retries来控制server端重试次数。
其次,a在断开后收到b的syn+ack消息,分为两种情况:1、a主机上tcp协议栈上没有打开syn+ack中的目标端口,直接回复rst报文来通知b;2、a上凑巧有其它应用使用了该端口,内核会检查状态,比如报文的isn序列号,发现对不上从而丢弃该报文。
■网友
【TCP建立连接时三次握手中的一个疑问点】 我们假设这是一次主机A向主机B请求ssh的连接
A.45678(端口号)-------B.22(端口号)
假设这次的已经丢失
A继续发送
可能性1:继续以端口45678发送握手包,成功建立连接A.45678\u0026lt;--------------\u0026gt;B.22,这时候之前延迟到达的握手包同样是A.45678,而这个端口号已经建立了连接,在没有四次断开的情况下没有意义。会被抛弃
可能性2:A以新的端口55555发送握手包并建立连接A.55555\u0026lt;-----------\u0026gt;B.22,当之前A.45678的握手包到达,B会回应但不会影响A.55555\u0026lt;----------\u0026gt;B.22这条连接,A这边重发时一般会放弃之前的SYN等待,没有SYN直接的情况下接收到SYN-ACK会将其抛弃
开源的ssh应用源码没看过,所以不太清楚是继续使用相同端口还是使用新的随机端口
推荐阅读
- 江苏■全省信访事项办理群众满意率达95% 江苏基本建立信访业务标准化体系
- |南通海关提醒企业:建立健全出口管制内部合规制度
- 联通校园宽带限制笔记本发射wifi让其他设备连接,这样做合法吗
- |东风轻量化车身连接试制平台正式投用
- win7中本地连接跟无线网卡同时使用时是怎么样的模式
- 怎么样将家里的液晶电视和笔记本电脑连接
- 火车上能建立wifi吗
- 让一个网游(或手游)连接自己的服务器或pc
- 选择一款IT资产管理系统(集合硬件资源、归属部门、ip地址、远程连接)等功能
- 两个网卡不同宽带同时连接外网,或者一个网卡双ip,电脑是怎样选择线路的
