输入网址后的全过程

自己总结了一张全图
输入网址后的全过程
名词解释:

SYN(synchronous建立联机)
假如服务器B和客户机A通讯. 当A要和B通信时,A首先向B发一个SYN (Synchronize)
标记的包,告诉B请求建立连接。

SYN/ACK
接着,B收到后会发一个对SYN包的确认包(SYN/ACK)回去,表示对第一个SYN包的确
认,并继续握手操作.
ACK(acknowledgement 确认)
A收到SYN/ACK 包,A发一个确认包(ACK),通知B连接已建立。至此,三次握手完成,
一个TCP连接完成。ACK为1表示确认号有效,为0表示报文中不包含确认信息,忽略确认号字段。

SYN_RCVD
这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态,也就是连接成功状态。

SYN_SENT
这个状态与SYN_RCVD遥相呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。

FIN(finish结束)
FIN为1表示发送方字节流结束,用于关闭连接。

为什么握手三次挥手四次?
因为TCP是全双工通信的。就是A在向B传输的同时B也可以向A传输数据。
(1)第一次挥手:因此当主动方发送断开连接的请求(即FIN报文)给被动方时,仅仅代表主动方不会再发送数据报文了,但主动方仍可以接收数据报文。
(2)第二次挥手:被动方此时有可能还有相应的数据报文需要发送,因此需要先发送ACK报文,告知主动方“我知道你想断开连接的请求了”。这样主动方便不会因为没有收到应答而继续发送断开连接的请求(即FIN报文)。
(3)第三次挥手:被动方在处理完数据报文后,便发送给主动方FIN报文;这样可以保证数据通信正常可靠地完成。发送完FIN报文后,被动方进入LAST_ACK阶段(超时等待)。
(4)第四挥手:如果主动方及时发送ACK报文进行连接中断的确认,这时被动方就直接释放连接,进入可用状态。
握手操作也可以理解为四次握手,只是将收到请求的ack报文和给客户端的syn报文一同发送了回去,两次操作一起进行。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值