建网站要多少钱一个,怎样把网站做的更好,wordpress机器人插件,网络布局设计1. 三次握手 请求端#xff08;通常称为客户#xff09;发送一个 S Y N段指明客户打算连接的服务器的端口#xff0c;以及初始序号。这个S Y N段为报文段1。服务器发回包含服务器的初始序号的 S Y N报文段#xff08;报文段2#xff09;作为应答。同时#xff0c;将确认序…1. 三次握手 请求端通常称为客户发送一个 S Y N段指明客户打算连接的服务器的端口以及初始序号。这个S Y N段为报文段1。服务器发回包含服务器的初始序号的 S Y N报文段报文段2作为应答。同时将确认序号设置为客户的I S N加1以对客户的S Y N报文段进行确认。一个S Y N将占用一个序号。客户必须将确认序号设置为服务器的 I S N加1以对服务器的S Y N报文段进行确认报文段3。
除了交换彼此的初始序列号三次握手的另一个重要作用是交换一些辅助信息比如最大段大小MSS、窗口大小Win、窗口缩放因子WS)、是否支持选择确认SACK_PERM等
1.1 初始序列号Initial Sequence Number, ISN
初始的序列号并非从 0 开始通信双方各自生成一般情况下两端生成的序列号不会相同。生成的算法是 ISN 随时间而变化会递增的分配给后续的 TCP 连接的 ISN。
1.1.1 ISN 能设置成一个固定值呢
1、出于安全性考虑。如果被知道了连接的ISN很容易构造一个在对方窗口内的序列号源 IP 和源端口号都很容易伪造这样一来就可以伪造 RST 包将连接强制关闭掉了。如果采用动态增长的 ISN要想构造一个在对方窗口内的序列号难度就大很多了。
2、因为开启 SO_REUSEADDR 以后端口允许重用收到一个包以后不知道新连接的还是旧连接的包因为网络的原因姗姗来迟造成数据的混淆。如果采用动态增长的 ISN那么可以保证两个连接的 ISN 不会相同不会串包。
RFC 793指出I S N可看作是一个3 2比特的计数器每4 m s加1。这样选择序号的目的在于防止在网络中被延迟的分组在以后又被传送而导致某个连接的一方对它作错误的解释。
1.2 三次握手的状态变化 对于客户端而言: 初始的状态是处于 CLOSED 状态。CLOSED 并不是一个真实的状态而是一个假想的起点和终点。 客户端调用 connect 以后会发送 SYN 同步报文给服务端然后进入 SYN-SENT 阶段客户端将保持这个阶段直到它收到了服务端的确认包。 如果在 SYN-SENT 状态收到了服务端的确认包它将发送确认服务端 SYN 报文的 ACK 包同时进入 ESTABLISHED 状态表明自己已经准备好发送数据。
对于服务端而言
初始状态同样是 CLOSED 状态在执行 bind、listen 调用以后进入 LISTEN状态等待客户端连接。当收到客户端的 SYN 同步报文以后会回复确认同时发送自己的 SYN 同步报文这时服务端进入 SYN-RCVD 阶段等待客户端的确认。当收到客户端的确认报文以后进入ESTABLISHED 状态。这时双方可以互相发数据了 1.3 同时打开的状态变化
两个应用程序同时彼此执行主动打开的情况是可能的尽管发生的可能性极小。每一方必须发送一个 S Y N且这些S Y N必须传递给对方。这需要每一方使用一个对方熟知的端口作为本地端口。这又称为同时打开 simultaneous open。
例如主机A中的一个应用程序使用本地端口 7 7 7 7并与主机B的端口8 8 8 8执行主动打开。主机B中的应用程序则使用本地端口 8 8 8 8并与主机A的端口7 7 7 7执行主动打开。
这与下面的情况不同主机A中的Te l n e t客户程序和主机B中Te l n e t的服务器程序建立连接与此同时主机 B中的Te l n e t客户程序与主机A的Te l n e t服务器程序也建立连接。在这个 Te l n e t例子中两个Te l n e t服务器都执行被动打开而不是主动打开并且 Te l n e t客户选择的本地端 口不是另一端Te l n e t服务器进程所熟悉的端口。
T C P是特意设计为了可以处理同时打开对于同时打开它仅建立一条连接而不是两条连 接 两端几乎在同时发送 S Y N并进入S Y N _ S E N T状态。当每一端收到 S Y N时状态变为S Y N _ R C V D他们都再发S Y N并对收到的S Y N进行确认。当双方都收到 S Y N及相应的A C K时状态都变迁为E S TA B L I S H E D。图1 8 - 1 7显示了这些状态变迁过程。 参考资料
《深入理解 TCP 协议从原理到实战》