对TCP三次握手的理解
最近确实有点刷博客,但我其实不是刻意刷的。因为准备实习,复习知识时难免会有一些自己的想法,总结一下,用自己的语言描述过程,也是为了加深理解,免得死记硬背。
其实我觉得,要是面试问3次握手,背下一个表格就可以了:
syn | ack | seq | |
客户端 | true | x | |
服务器 | true | x+1 | y |
客户端 | y+1 | z |
但我觉得,既然学到了,就有必要细致的学习下去,不能急功近利的去死记硬背,毕竟对我而言,还有一年的时间才会毕业,毕竟才3月份刚结束。
当然,这3次握手毕竟显得有点抽象,不便于理解是两只什么样的“手”。这里给一个wireshark拦截的数据片段。
这样就把抽象的过程具体化了,但是光这3串字符串并不能说明什么,有必要用自己的话对过程进行个简单的描述:
在一个syn报头里,有这些数据:
Seq:顺序号码,其实这个数字是随机产生的,它是为了连接以后传送数据用,第三次握手是在第一次握手的值上+1。他和ack相对应,ack是等待接收的数据包的序列号。这个就和前面的表对应上了
Win:windowssize:确实是窗口大小的意思,但它的作用是TCP流量的控制。比如这里的win=8192表示一次可以发8192个数据包。这个值是可变的,因为是16位,所以范围最大是65535
Len:它确实是长度的意思,但表示的是段长,就是Segment,和下面的MSS是对应的,我的理解是,TCP可以把上一层的请求分成更小的段,但握手时不需要数据,不知道理解的对不对
MSS:maximum segment size 是最大报文传输段,不包括TCP首字段,它表示期望收到的MSS的值,默认值是536,单位是字节,即主机能够接受20+536字节的TCP报文段。
SACK-PERM:选择确认,是用来重传缺少的报文段。它的选项字段最大是40字节,其中两个是功能字节。比如缺失了字节块,就会用剩余的38个字节记录位置。由于缺失序号由起点和终点组成,且每个序号是32位,因此记录一个快需要64位,就是8个字节。因此它只能指明4个字节块。
这就是我的理解,参考了很多东西换成自己的语言就是这样,有的可能不是很准确。
当然,关于SYN攻击我也说一点理解吧:因为第二次握手是半连接,会有超时的可能,所以服务器会有一条任务序列。通过伪造IP,发送大量这样的请求,服务器就会在得不到第三次握手时不断伸出“手”来尝试,这样就越来越慢了。因为linux的netstat(这个语句也是面试必考吧?)可以查看链接状况,所以可以关掉SYN_RECV状态下的链接。
对于Socket的理解
我们都知道,在java里用Socket实现三次握手就是connect()方法解决的。我过去也一直想弄明白Socket和网络七个层之间的关系。这里先列出我以前笔记里的一个表格
应用层(程序) | HTTP、FTP等 |
表示层(协议,编码,压缩) | |
会话层(同步,安全性) | |
传输层(顺序,出包) TCP负责传输 | TCP |
网络层 (目的地<物理地址>出小包) IP规定一个地址 目的地 | IP |
数据链路层 (01封帧) | |
物理层 (传比特流01) |
Socket实际上是一个接口,它不属于OSI,但它用到了TCP层以上的功能实现通信,它需要使用TCP的端口号
而HTTP这些协议用到了TCP的端口,比如HTTP就是80端口
四次挥手我也用表格表示
fin | ack | seq | |
主动方 | TRUE | z | x |
被动方 | x+1 | z | |
被动方 | TRUE | x | y |
主动方 | y | x |
fin表示结束会话
转载于:https://my.oschina.net/tdONEmadao/blog/212839
- 点赞
- 收藏
- 分享
- 文章举报
- 理解TCP为什么需要进行三次握手(白话)
- 关于TCP/IP三次握手和四次分手的理解
- TCP+UDP区别&&TCP三次握手理解
- 谈谈你对 TCP 三次握手和四次挥手的理解
- 理解TCP为什么需要进行三次握手(白话)
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
- TCP的三次握手与四次挥手的理解
- TCP的三次握手与四次挥手理解及面试题
- 对TCP三次而不是两次握手的理解
- 通俗理解TCP握手次数是三次?
- 理解TCP中的三次握手
- 理解TCP三次握手--大白话
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
- 理解TCP/IP三次握手与四次挥手的正确姿势
- TCP/IP 三次握手与四次挥手的理解
- TCP三次握手连接及seq和ack号的正确理解
- TCP漏洞:半链接(有助于理解TCP的三次握手协议)
- 深入理解TCP三次握手
- TCP/IP三次握手理解
- 理解TCP为什么需要进行三次握手(白话)