博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP三次握手和四次挥手
阅读量:7062 次
发布时间:2019-06-28

本文共 1259 字,大约阅读时间需要 4 分钟。

三次握手

1.客户端发送 SYN(SEQ=x)报文给服务器端,进入 SYN_SEND 状态。

2.服务器端收到 SYN 报文,回应一个 SYN (SEQ=y)ACK(ACK=x+1)报文,进入 SYN_RECV 状态。
3.客户端收到服务器端的 SYN 报文,回应一个 ACK(ACK=y+1)报文,进入 Established 状态。

打电话例子:

A:“喂,你听得到吗?” A->SYNSEND
B:“我听得到呀,你听得到我吗?” 应答与请求同时发出 B->SYN_RCVD | A->ESTABLISHED
A:“我能听到你,今天 balabala……” B->ESTABLISHED

四次挥手

1.某个应用进程首先调用 close,称该端执行“主动关闭”(active close)。该端的 TCP 于是发送一个 FIN 分节,表示数据发送完毕。

2.接收到这个 FIN 的对端执行 “被动关闭”(passive close),这个 FIN 由 TCP 确认。
3.一段时间后,接收到这个文件结束符的应用进程将调用 close 关闭它的套接字。这导致它的 TCP 也发送一个 FIN。
4.接收这个最终FIN的原发送端 TCP(即执行主动关闭的那一端)确认这个 FIN。 既然每个方向都需要一个 FIN 和一个 ACK,因此通常需要 4 个分节。

打电话例子:

A:“喂,我不说了。” A->FIN_WAIT1
B:“我知道了。等下,上一句还没说完。Balabala…..” B->CLOSE_WAIT | A->FIN_WAIT2
B:”好了,说完了,我也不说了。” B->LAST_ACK
A:”我知道了。” A->TIME_WAIT | B->CLOSED

为什么TCP连接只要三次而释放需要四次呢?

这是由于TCP的半闭造成,因为TCP连接是全双工,所以进行关闭时每个方向都需要单独关闭,这个单方向的关闭叫做半关闭。当一方完成它数据发送任务的时候,就发送一个FIN来向另一方通告对方我将要终止这个方向的连接。

TCP的状态(SYN,FIN,ACK,PSH,RST,URG)

1.SYN(synchronous):建立连接

2.FIN(finish):结束连接
3.ACK(acknowledgement):确认
4.PSH(push):传送
5.RST(reset):重置
6.URG(urgent):紧急

常用的TCP端口及功能

端口 协议 说明
21 FTP FTP服务器所开放的控制端口
23 TELNET 用于远程登录,可以远程控制管理目标计算机
25 SMTP SMTP服务器开放的端口,用于发送邮件
80 HTTP 超文本传输协议
110 PoP 用于邮件的接受

常用的UDP端口号及功能

端口 协议 说明
69 TFTP 简单的文件传输协议
111 RPC 远程过程调用
123 NTP 网络时间协议

转载于:https://blog.51cto.com/13803922/2128765

你可能感兴趣的文章
苹果手机定位用户行迹:是否对信息安全构成威胁?
查看>>
金风科技澳洲首座20兆瓦光伏电站将于2017年投产
查看>>
Java 代理
查看>>
《Effective Debugging:软件和系统调试的66个有效方法》——第12条:将复杂的测试场景自动化...
查看>>
企业物联网安全的四个关键步骤
查看>>
盗版的软件更易被攻击 勒索钱财是黑客惯用形式
查看>>
SPI绿能宝与金沙江资本签署5亿美元可转债协议
查看>>
中英专家建言:未来城市发展要智慧化“留白”
查看>>
象棋中马行走路线的测试用例设计
查看>>
乌当区前三季度大数据产业实现产值60亿元
查看>>
可以拖动的弹出窗
查看>>
Tiny之Web工程构建
查看>>
android 的android httpClient详解
查看>>
IOS SEL的理解与使用
查看>>
iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式
查看>>
iOS开发之SQLite--C语言接口规范(三)——Binding Values To Prepared Statements
查看>>
gdb 调试 sysbench
查看>>
Oracle官方并发教程之中断
查看>>
使用模板实现编译期间多态
查看>>
[置顶].NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB
查看>>