• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

TCP-是如何建立连接的

linux 搞代码 3年前 (2022-03-03) 35次浏览 已收录 0个评论

TCP:SYN ACK FIN RST PSH URG简析

三次握手Three-way Handshake

Understanding TCP Connection with Examples
一个虚构连贯的建设是通过三次握手来实现的

  1. (B) –> [SYN] –> (A)

如果服务器A和客户机B通信. 当A要和B通信时,B首先向A发一个SYN (Synchronize) 标记的包,通知A申请建设连贯.

留神: 一个 SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources). 意识到这点很重要,只有当A受到B发来的SYN包,才可建设连贯,除此之外别无他法。因而,如果你的防火墙抛弃所有的发往外网接口的SYN包,那么你将不 能让内部任何主机被动建设连贯。

  1. (B) <– [SYN/ACK] <–(A)

接着,A收到后会发一个对SYN包的确认包(SYN/ACK)回去,示意对第一个SYN包的确认,并持续握手操作.

留神: SYN/ACK包是仅SYN 和 ACK 标记为1的包.

  1. (B) –> [ACK] –> (A)

B收到SYN/ACK 包,B发一个确认包(ACK),告诉A连贯已建设。至此,三次握手实现,一个TCP连贯实现

Note: ACK包就是仅ACK 标记设为1的TCP包. 须要留神的是当三此握手实现、连贯建设当前,TCP连贯的每个包都会设置ACK位

这就是为何连贯跟踪很重要的起因了. 没有连贯跟踪,防火墙将无奈判断收到的ACK包是否属于一个曾经建设的连贯.个别的包过滤(Ipchains)收到ACK包时,会让它通过(这相对不是个 好主见). 而当状态型防火墙收到此种包时,它会先在连贯表中查找是否属于哪个已建连贯,否则抛弃该包

Understanding TCP Sequence Number with Examples

在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.
其中,对于咱们日常的剖析有用的就是后面的五个字段。

它们的含意是:

URG:Urget pointer is valid (紧急指针字段值无效)

SYN: 示意建设连贯

FIN: 示意敞开连贯

ACK: 示意响应

PSH: 示意有 DATA数据传输

RST: 示意连贯重置。

Understanding PSH ACK TCP Flags

其中,ACK是可能与SYN,FIN等同时应用的,比方SYN和ACK可能同时为1,它示意的就是建设连贯之后的响应,如果只是单个的一个SYN,它示意的只是建设连贯。TCP的几次握手就是通过这样的ACK体现进去的。但SYN与FIN是不会同时为1的,因为前者示意的是建设连贯,而后者示意的是断开连接。RST个别是在FIN之后才会呈现为1的状况,示意的是连贯重置。个别地,当呈现FIN包或RST包时,咱们便认为客户端与服务器端断开了连贯;而当呈现SYN和SYN+ACK包时,咱们认为客户端与服务器建设了一个连贯。PSH为1的状况,个别只呈现在 DATA内容不为0的包中,也就是说PSH为1示意的是有真正的TCP数据包内容被传递。

Flags值阐明:

FIN: "finished"简写。示意发送者以及发送完数据。通常用在发送者发送完数据的最初一个包中。
SYN: "Synchronisation"简写。示意三次握手建设连贯的第一步,在建设连贯时发送者发送的第一个包中设置flag值为SYN。
RST: "reset"简写。重置连贯标记,用于重置因为主机解体或其余起因而呈现谬误的连贯。或者发送包发送到一个不是冀望的                  目标主机时,接收端发送reset 重置连贯标记的包。
PSH: "push"简写。告诉接收端解决接管的报文,而不是将报文缓存到buffer中。
ACK: "Acknowledgment"简写。示意包曾经被胜利接管。
URG: "urgent"简写。告诉接收端解决在解决其余包前优先解决接管到的紧急报文(urgent packets)。详见RFC6093。
ECE: "ECN-Echo"简写。ECN示意Explicit Congestion Notification。示意TCP peer有ECN能力。详见RFC3168。
CWR: "Congestion Window Reduced"简写。发送者在接管到一个带有ECE flag包时,将会应用CWR flag。 详见RFC3168。
NS: "nonce sum"简写。该标签用来爱护不受发送者发送的突发的歹意暗藏报文的侵害。详见 RFC 3540。

Understanding TCP Flags

各个Field阐明:

源端口(Source Port):长度为16 bits(2个字节)。源端口。
目标端口(Destination Port):长度为16 bits(2个字节)。目标端口。
序列号(Sequence Number):长度为32 bits(4个字节)。指定了以后数据分片中调配给第一字节数据的序列号。在TCP传输流中每一个字节为一个序号。如果TCP报文中flags标记位为SYN,该序列号示意初始化序列号(ISN),此时第一个数据应该是从序列号ISN+1开始。
确认序列号(Acknowledgment Number):长度为32bits(4个字节)。示意TCP发送者冀望承受下一个数据分片的序列号。该序号在TCP分片中Flags标记位为ACK时失效。序列号分片的方向和流的方向同方向,而确认序列号分片方向和流方向反方向.

Understanding TCP Socket With Examples

Exploring TCP Connection Time_Wait in Linux Netstat


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:TCP-是如何建立连接的

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址