默认

[通俗易懂]深入理解TCP协议(上):理论基础

查看数: 354374 | 评论数: 31 | 收藏 45
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-09-01 14:12

正文摘要:

1、前言 TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,我还是推荐你去 ...

评论

Legion_coder 发表于 2 年前

看完有收获,谢谢
jackyweijie 发表于 2 年前
谢谢分享
zxqdlenovo 发表于 3 年前
谢谢楼主分享
JackJiang 发表于 3 年前
引用:xxiaoh 发表于 2021-04-13 17:34
这个攻击本身就是为了挤爆服务器的链接,是服务器的tcp都处于半链接状态,从而使得正常请求不能成功响应 ...

优秀
xxiaoh 发表于 3 年前
引用:jevensonv 发表于 2019-12-03 17:17
还有没太理解SYN Flood攻击:
这段话:“TCP会通过源地址端口、目标地址端口和时间戳打造出一个特别的Sequ ...

这个攻击本身就是为了挤爆服务器的链接,是服务器的tcp都处于半链接状态,从而使得正常请求不能成功响应,所以攻击者发起syn后直接下线,然后服务器就会一直等这个ack,然后服务就挂了
xxiaoh 发表于 3 年前
引用:jevensonv 发表于 2019-12-03 17:10
不是很明白,有很多问题没有写清楚。
随便举个例子吧:
快速重传机制,这里:

第一个问题我理解起来是没写错的吧,在传输数据的时候,servicer响应的ack(X) = client放出的seq + 数据接收的长度,以此来表示servicer希望client下一个数据包从X开始
第二个问题,觉得算法应该是用于连续包的情况的,对于单一的应该有其他处理,也可能就是等超时
第三个问题因为发送端不知道啊,因为重复回ack2,发送端不知道后续的3,4,5是不是也到了,当然要考虑是重传全部剩余的还是你说的其中一个
xxiaoh 发表于 3 年前
8.1中第一段,"ack回4为什么表示3和4都收到了",不是应该仅仅表示3收到了嘛?
masonhunk 发表于 3 年前
感谢博主。很喜欢这个系列。
有一个关于DSACK的问题还是想请教下:
是否DSACK的作用还是感觉不太理解,比如以ACK丢包为例,当发送端重传第一个包的时候,接收端回复ACK=4000并附带SACK,但这时候由于ACK=4000,所以发送端已经足够确认是ACK丢失了,因为ACK已经覆盖了发送端第二个包的范围,不需要通过SACK来推断这个信息。所以DSACK在这里的作用是否会显得鸡肋一些?
JackJiang 发表于 4 年前
引用:jevensonv 发表于 2019-12-03 17:17
还有没太理解SYN Flood攻击:
这段话:“TCP会通过源地址端口、目标地址端口和时间戳打造出一个特别的Sequ ...

文章的意思是,正常连接有这个序列号,攻击者没有,或者不太容易伪造,是这个意思。
JackJiang 发表于 4 年前
引用:一只小熊 发表于 2020-08-05 16:52
hello 时隔两年,你有弄明白你提出的这个疑问吗

一只小熊 发表于 4 年前
引用:lmyJavaDE1 发表于 2018-08-03 15:55
"Fast Retransmit只解决了一个问题,就是timeout的问题,它依然面临一个艰难的选择,就是,是重传之前的一 ...

hello 时隔两年,你有弄明白你提出的这个疑问吗
jevensonv 发表于 5 年前
还有没太理解SYN Flood攻击:
这段话:“TCP会通过源地址端口、目标地址端口和时间戳打造出一个特别的Sequence Number发回去(又叫cookie),如果是攻击者则不会有响应,如果是正常连接,则会把这个 SYN Cookie发回来,然后服务端可以通过cookie建连接(即使你不在SYN队列中)。”

为啥攻击者不会响应?如果攻击者也按照协议规定去响应呢?会不会出问题
jevensonv 发表于 5 年前
不是很明白,有很多问题没有写清楚。
随便举个例子吧:
快速重传机制,这里:
“”比如:如果发送方发出了1,2,3,4,5份数据,第一份先到送了,于是就ack回2“
1, 为什么第1份数据到了是回2,不是回1,明显有问题,应该是写错
2,上面的例子只写了5份数据的情况,如果只发一份数据呢?怎么保证连续收到3次相同的包,表示需要重传
3,为啥没有解决“”是重传之前的一个还是重传所有的问题”?不是收到3次,就只传一个包就行了,不需要重传所有啊。比如收到3次#2,其他都收到了,只重传#2不就可以了。

不知道我理解的正确与否?麻烦博主回答一下
沙忍 发表于 5 年前
图文并茂,很赞
JackJiang 发表于 5 年前
引用:Jonphy 发表于 2019-07-24 17:06
别别,文章过短就难以明了于阅读者,我还是卧床阅读好了

嗯嗯 希望床受的了
Jonphy 发表于 5 年前
引用:JackJiang 发表于 2019-07-24 16:18
下次文章我弄短点,不然长此以往,不说屁股,马桶都受不了

别别,文章过短就难以明了于阅读者,我还是卧床阅读好了
JackJiang 发表于 5 年前
引用:Jonphy 发表于 2019-07-24 14:14
我蹲在厕所里看,等完事的时候,双腿已经麻的站不起来

下次文章我弄短点,不然长此以往,不说屁股,马桶都受不了
Jonphy 发表于 5 年前
我蹲在厕所里看,等完事的时候,双腿已经麻的站不起来
lmyJavaDE1 发表于 6 年前
"Fast Retransmit只解决了一个问题,就是timeout的问题,它依然面临一个艰难的选择,就是,是重传之前的一个还是重传所有的问题。对于上面的示例来说,是重传#2呢还是重传#2,#3,#4,#5呢?因为发送端并不清楚这连续的3个ack(2)是谁传回来的?也许发送端发了20份数据,是#6,#10,#20传来的呢。这样,发送端很有可能要重传从2到20的这堆数据(这就是某些TCP的实际的实现)。"
这个快速重传为什么说不知重传哪个包的问题? 正如文中所说的,#1包收到了,回#2ack,结果没收到,持续发超过3次的#2ack,发送端发送#2的包,#2ack的编号不就是接受端下次的想要收到包的seq么?所以发送#2ack已经告诉发送端想要哪个包了
lmyJavaDE1 发表于 6 年前
“ARP在第二层——Data Link层”, ARP不是应该在 网络层吗?

返回顶部