tcpip详解卷1
序号⽤来标识从T C P发端向T C P收端发送的数据字节流,它表⽰在这个报⽂段中的的第⼀个数据字节。如果将字节流看作在两个应⽤程序间的单向流动,则 T C P⽤序号对每个字节进⾏计数。序号是32 bit的⽆符号数,序号到达 2^32-1后⼜从0开始。
T C P为应⽤层提供全双⼯服务。这意味数据能在两个⽅向上独⽴地进⾏传输。因此,连接的每⼀端必须保持每个⽅向上的传输数据序号。T C P提供了⼀种可靠的⾯向连接的字节流运输层服务。
T C P将⽤户数据打包构成报⽂段;它发送数据后启动⼀个定时器;另⼀端对收到的数据进⾏确认,对失序的数据重新排序,丢弃重复数据; T C P提供端到端的流量控制,并计算和验证⼀个强制性的端到端检验和。
三次握⼿
1. 请求端(客户)发送⼀个SYN段指明客户打算连接的服务器的端⼝,以及初始序号ISN,这个SYN段为报⽂段1.
c tcpip协议2. 服务器发回包含服务器的初始序号的SYN报⽂段(2)作为应答.同时,将确认序号设置为客户的ISN加1以对客户的SYN报⽂段进⾏确认,⼀
个SYN将占⽤⼀个序号.
3. 客户必须将确认序号设置为服务器的ISN加1以对服务器的 SYN报⽂段(3)进⾏确认
当⼀端为建⽴连接⽽发送它的 S Y N时,它为连接选择⼀个初始序号。 I S N随时间⽽变化,因此每个连接都将具有不同的 I S N。 RFC 793 [Postel 1981c]指出I S N可看作是⼀个3 2⽐特的计数器,每 4 m s加1。这样选择序号的⽬的在于防⽌在⽹络中被延迟的分组在以后⼜被传送,⽽导致某个连接的⼀⽅对它作错误的解释。
建⽴⼀个连接需要三次握⼿,⽽终⽌⼀个连接要经过 4次握⼿。这由 T C P的半关闭(h a l f - c l o s e)造成的。既然⼀个 T C P连接是全双⼯(即数据在两个⽅向上能同时传递),因此每个⽅向必须单独地进⾏关闭。这原则就是当⼀⽅完成它的数据发送任务后就能发送⼀个 F I N来终⽌这个⽅向连接。当⼀端收到⼀个 F I N,它必须通知应⽤层另⼀端⼏经终⽌了那个⽅向的数据传送。发送F I N通常是应⽤层进⾏关闭的结果。收到⼀个F I N只意味着在这⼀⽅向上没有数据流动。⼀个 T C P连接在收到⼀个 F I N后仍能发送数据。
当服务器收到这个 F I N,它发回⼀个A C K,确认序号为收到的序号加 1(报⽂段5)。和S Y N⼀样,⼀个F I N将占⽤⼀个序号。同时 T C P服务器还向应⽤程序(即丢弃服务器)传送⼀个⽂件结束符。接着这个服务器程序就关闭它的连接,导致它的 T C P端发送⼀个F I N(报⽂段6),客户必须发回⼀个
确认,并将确认序号设置为收到序号加1(报⽂段7)。
最⼤报⽂段长度
当建⽴⼀个连接时,每⼀⽅都有⽤于通告它期望接收的 M S S选项(M S S选项只能出现在S Y N报⽂段中)。如果⼀⽅不接收来⾃另⼀⽅的 M S S值,则M S S就定为默认值5 3 6字节(这个默认值允许 2 0字节的I P⾸部和2 0字节的T C P⾸部以适合5 7 6字节I P数据报)。
当 T C P发送⼀个 S Y N时,或者是因为⼀个本地应⽤进程想发起⼀个连接,或者是因为另⼀端的主机收到了⼀个连接请求,它能将 M S S 值设置为外出接⼝上的 M T U长度减去固定的I P⾸部和T C P⾸部长度。对于⼀个以太⽹, M S S值可达1 4 6 0字节。
如果⽬的 I P地址为“⾮本地的 ( n o n l o c a l )”, M S S通常的默认值为 5 3 6。
TCP的状态变迁图
TCP的状态变迁图
TCP正常连接建⽴和终⽌所对应的状态
2MSL等待状态
T I M E _ WA I T状态也称为 2 M S L等待状态。每个具体 T C P实现必须选择⼀个报⽂段最⼤⽣存时间M SL(Maximum Segment Lifetime)。它是任何报⽂段被丢弃前在⽹络内的最长时间。
当 T C P执⾏⼀个主动关闭,并发回最后⼀个 A C K,该连接必须在 T I M E _ WA I T状态停留的时间为 2倍的M S L。这样可让 T C P再次发送最后的A C K以防这个A C K丢失(另⼀端超时并重发最后的 F I N)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。