TCP 连接的建立
三次握手建立连接:
1、一方(server)被动地等待一个进来的连接请求
2、另一方(the client)通过发送连接请求,设置一些参数
3、服务器方回发确认应答
4、应答到达请求方,请求方最后确认,连接建立
三次握手建立TCP连接 :
一次:SYN=1,ACK=0
二次:SYN=1,ACK=1
三次:SYN=0,ACK=1
实质:三次握手建立连接是一个同步的过程,交换 初始序列号,保证后续的每一个字节的可靠 传输。
CR:重复连接请求
注意 :
1、SYN泛洪导致DoS攻击(伪造源IP)
2、数据传输开始后可能有两个原因导致阻塞 快的机器向慢的机器发送数据 多台机器同时向一台机器发送数据
3、TCP数据段传送之前,一定要建立TCP连接
TCP 连接的释放
1、任何一方在没有数据要传送的时候,都可以发送一个FIN置位了 的 TCP 数据段。
2、当FIN被确认的时候,该方向的连接被关闭,当双向连接都关闭了的时候,连接释放。
FIN:FIN(ISH)为TCP报头的码位字段,该位置为1的含义为发送方字节流结束,用于关闭连接。
定时器
原理:如果一方发送了FIN数据段出去却在一个设定的时间没有收到应 答,释放连接 另一方最终会注意到连接的对方已经不在了,超时后连接释放。
DR:指定路由器
半开放连接
产生原因:果初始DR的和重传都丢了,协议失败,发送者将放弃发送且释放连接,但是,另外一端却不知道这 些情况,仍然处于活跃的状态。
解决方法:如果在一定的时间内,没有TPDUs 到达的话,连接自动释放 。如果这样,传输实体在发送一个TPDU的时候必须启动定时器,定时器超期,将发动一个哑TPDU(dummy TPDU), 以免被断掉。
TPDUs:
TPDU:传送协议数据单元。代表从一个传输实体发送至另一个传输实体的消息。
哑TPDU:
TCP会话终止4步流程
总结:
TCP是全双工的,连接的释放必须是双向的 ,FIN=1。
半开半闭的连接必须杀掉。
超时会挂掉连接。
TCP 传输策略
WIN:
SEQ:
解决:窗口尺寸受制于接收方问题。
当窗口数为 0 时,发送者不能正常发送数据段,除非:
1、Urgent数据。比如,用户想杀掉远端机器上的进程的时候, 可以发送数据
2、发送者可以发送一个字节的数据段,以便让接收者再次发送 期待接收的字节号和窗口数(避免死锁)