tcp port numbers reused出现原因_初识TCP协议

c69eef4d63b8f361c534e8213af75104.png

1. TCP协议的概念

TCP是TCP/协议簇中最重要也是最复杂协议,它位于OSI七层协议模型的网络层,它提供了一种全双工的、面向连接的、可靠的字节流服务。TCP协议是两台主机进程进行通信的基石,TCP使用连接(connection)作为最基本的抽象,同时将TCP连接的端点称为插口或者套接字(socket)。

  • 全双工:通信两端在任意时刻可以互相发送数据,既可以是客户端也可以是服务端。
  • 面向连接:通信前需要先三次握手建立连接,通信后四次挥手释放连接。
  • 可靠的:通过序号解决报文乱序/丢失、超时重传、拥塞控制、滑动窗口、检验和。
  • 字节流:没有固定的报文边界。

1.1 socket

d9740fd939548671f4b04b08a7639fe6.png

如上图所示,客户端ip+port和服务端ip+port的四元组,组成一个socket可以唯一标识一个连接,所以理论上来说服务器的一个端口就能连接成千上万的连接。

2. TCP首部格式

TCP的首部包含了20字节的固定部分和长度可变的选项部分,如下图所示:

32c74a40a9f4109def6b5165cc6639f3.png
  • 端口号:每个TCP段都包含各占两个字节的源端和目的端的端口号,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接。
  • 序号:TCP协议在数据传输的过程中是基于字节流的并且在传输给传输层的时候会将字节流进行分段,序号用来表示这个报文段的第一个字节(报文段的第一个字节号就是序号)。这个序号是由特定的算法生成的随着时间逐渐递增的数字,最大值是2^32-1。这样设计序号主要有三个原因:
  1. 标识两个主机间前后传输报文段的关系。
  2. 防止由于网络延迟有的分组被重发后,而导致某一方连接做出错误的解释。
  3. 防止黑客TCP劫持。
  • 确认号:是期望收到下个报文段数据的第一个字节号。
  • 指出首部长度共有多少4个字节,TCP首部长度可以在20-60个字节之间。
  • 标志位:
    • URG:紧急bit,当URG=1时,代表该报文段有紧急数据应该尽快传输(优先级高)。
    • ACK:当ACK=1时代表确认号有效,否则无效。
    • PUS:当PUS=1时代表该报文段应当尽快传输给接收应用进程,而不用等待缓存填满。
    • RST:当RST=1时代表TCP连接出现了严重差错,必须释放连接然后重新建立。
    • SYN:当SYN=1时代表这是一个请求连接或者连接接受报文。
    • FIN:当FIN=1时代表报文段的发送端已经发送完数据,并要求释放连接。
  • 窗口:窗口字段用来控制发送方的的发送数据量,接收方根据设置的缓存确定自己接收窗口的大小,然后通知对方以确定对方发送窗口的上限。
  • 校验和:检验部分包括TCP首部和报文段部分,要加上12字节的伪首部。
  • 紧急指针:指出本报文段中紧急数据的最后一个字节的序号,并且URG标志位置为1。
  • 选项:TCP只规定了一种选项,即最大报文段长度MSS(max segment size),MSS会通知发送方我所能接收的报文段的数据字段的最大长度是MSS个字节。

3.题外话

在这里推荐下林沛满先生的两本书《WireShark网络分析就这么简单》和《WireShark网络分析的艺术》,林先生用幽默风趣的语言讲述了复杂的网络知识,书中都是林先生的实战经验,可以让我们收获到很多实战技巧。而且林先生也在书中分享他在工作中的方法论,读了之后让我收益匪浅,我把其中的一段话分享给了女朋友,也在这里分享给大家,希望大家能有所收获。

有些道理听上去很简单,然而当你着手准备面试材料的时候,可能会发现没什么拿得出手的。这又是什么原因呢?不是因为你平时碌碌无为,而更可能是因为没有总结的习惯,时间一长都忘了。这就是坚持写技术博客的价值之一,能用自己的语言表达出来才算真正理解并且记住了。写作能强迫思考,对于真正有技术含量的东西,你会在写作过程中加深理解,从此就忘不掉了;而技术含量不高的东西,你写个开头自然会停笔,从此忘掉也无所谓。不仅技术上如此,其他学科也一样,年轻的时候阅读国学经典,每篇都让人觉得顿悟了人生。但如果试着把感受写成文章,就会发现所谓的顿悟只是一碗心灵鸡汤。 ——摘自《WireShark网络分析就这么简单》

关注作者微信公众号:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值