We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
文章汇总 : 分享汇总 📚 (计算机网络系列文章持续更新)
三次握手主要指 TCP 在建立连接时候的一系列过程
🔌 Sequence 序列号是什么?因为 TCP 需要有确认,并且需要防止上次连接的迟到的报文被接收,所以需要对每个报文打上一个标记,用来防止失序的,或者上一次连接的报文被接收
假设两台主机 A 和 B,A 首先建立连接
这是我用 Wireshark 抓到的三次握手的数据包,绿色 🌱 框起来的是三次握手相关的报文。我们来具体分析一下这三个报文
下面图片里的红色框起来的是关键字段 :triangular_flag_on_post:
这就是主动连接的一方发送的 SYN 报文,注意这个报文的 Flags 的 Syn 字段被设置为 1,并且带了一个初始的 Sequence number:306621534,记住这个数字, 这样 A 就将自己的序列号发送给了 B
这个报文是 B 在收到 SYN 之后,对 A 的回应。作用是确认 A 发送来的 SYN,并将自己的序列号同步给 A 。
注意这里的 Acknowledgment number 是 306621535, 正好是 A 发来的 SYN 的序列号 + 1,这不是巧合,ACK 报文的确认号是 x ,意味着 序列号小于 x 的报文都收到了。
这个报文是 A 对收到的 SYN+ACK 的确认。这里的 Acknowledgment number 也正好是 B 发送的报文的序号 + 1。
现在三次握手相关知识都基本讲完了,来看几道面试题吧。
可以两次握手吗
不可以,因为会导致已经失效的连接请求的报文段又传到了服务端。并且两次握手也不能保证双方都互换了序列号
如果 A 发送给 B 的 ACK 中途丢失,会怎么样?
如果双方都没有数据发送, B 会周期重传 SYN + ACK ,直到 A 确认。如果 A 又数据发送,B 收到 A 的 Data + ACK ,会直接进入 ESTABLISHED 状态
https://time.geekbang.org/course/detail/100026801-118357
https://mp.weixin.qq.com/s/NIjxgx4NPn7FC4PfkHBAAQ
https://www.zhihu.com/question/24853633
The text was updated successfully, but these errors were encountered:
No branches or pull requests
TCP 三次握手
文章汇总 : 分享汇总 📚 (计算机网络系列文章持续更新)
三次握手主要指 TCP 在建立连接时候的一系列过程
握手目的
🔌 Sequence 序列号是什么?因为 TCP 需要有确认,并且需要防止上次连接的迟到的报文被接收,所以需要对每个报文打上一个标记,用来防止失序的,或者上一次连接的报文被接收
握手过程
假设两台主机 A 和 B,A 首先建立连接
抓包分析
这是我用 Wireshark 抓到的三次握手的数据包,绿色 🌱 框起来的是三次握手相关的报文。我们来具体分析一下这三个报文
SYN 报文
这就是主动连接的一方发送的 SYN 报文,注意这个报文的 Flags 的 Syn 字段被设置为 1,并且带了一个初始的 Sequence number:306621534,记住这个数字, 这样 A 就将自己的序列号发送给了 B
SYN + ACK 报文
这个报文是 B 在收到 SYN 之后,对 A 的回应。作用是确认 A 发送来的 SYN,并将自己的序列号同步给 A 。
注意这里的 Acknowledgment number 是 306621535, 正好是 A 发来的 SYN 的序列号 + 1,这不是巧合,ACK 报文的确认号是 x ,意味着 序列号小于 x 的报文都收到了。
ACK 报文
这个报文是 A 对收到的 SYN+ACK 的确认。这里的 Acknowledgment number 也正好是 B 发送的报文的序号 + 1。
一些面试题目
现在三次握手相关知识都基本讲完了,来看几道面试题吧。
可以两次握手吗
不可以,因为会导致已经失效的连接请求的报文段又传到了服务端。并且两次握手也不能保证双方都互换了序列号
如果 A 发送给 B 的 ACK 中途丢失,会怎么样?
如果双方都没有数据发送, B 会周期重传 SYN + ACK ,直到 A 确认。如果 A 又数据发送,B 收到 A 的 Data + ACK ,会直接进入 ESTABLISHED 状态
参考 🔖
https://time.geekbang.org/course/detail/100026801-118357
https://mp.weixin.qq.com/s/NIjxgx4NPn7FC4PfkHBAAQ
https://www.zhihu.com/question/24853633
The text was updated successfully, but these errors were encountered: