tcp状态机

概念

RTT:round trip time,客户端与服务端之间的往返时间
通告窗口:advertised window,告知对端在任何时刻它一次能从对端接收多少字节的数据,从而确保发送端发送的数据不会使接受端缓冲区溢出。
MSS:maximum segment size,连接中每个TCP分节中可以接受的最大数据量
MSL:maximum segment lifetime,最长分节生命周期

连接和断开

1.三次握手(three-way handshake)

  • 服务端准备好接受外来连接。称为被动打开(passive open)
  • 客户端发起主动打开(active open)。发送一个SYN分节,告知服务端该连接中自己发送的数据的初始序列号
  • 服务端确认(ACK)客户端SYN,同时发送一个SYN分节,告知客户端该连接中自己发送的数据的初始序列号
  • 客户端确认(ACK)服务端的SYN
tcp连接三次握手

2.四次挥手

  • 一端调用close,执行主动关闭(active close)。该端发送一个FIN字节,表示数据发送完毕
  • 接收这个FIN的对端执行被动关闭(passive close)。确认这个FIN。
  • 一段时间后,接收FIN的一端也调用close。也发送一个FIN字节
  • 接收这个最终FIN的原发送端(执行主动关闭的一端)确认这个FIN
tcp连接四次挥手

注意:

  • FIN、SYN对应的ACK就是原序列号+1
  • 在步骤2和步骤3之间,从执行被动关闭一端到执行主动关闭一端流动数据时可能的,称为半关闭(half-close)

3.状态机
state transition diagram

tcp状态机

实例

tcp连接的分组交换

服务端对客户请求的确认是伴随其应答发出的,这种做法称为捎带(piggybacking),它通常在服务端处理请求并产生应答的时间小于200ms时发生。如果服务端耗用更长时间,将会出现先是确认后是应答。

4.TIME_WAIT
执行主动关闭的一端经历这个状态,持续时间是2MSL。

存在理由

  • 可靠地实现TCP全双工连接的终止
    如果主动关闭一端发送的最终ACK丢失,可以重传该ACK。
  • 允许老的重复分节在网络中消逝
    假设ip1:port1和ip2:port2之间建立了TCP连接,该连接关闭后一段时间又在同ip:port上建立了TCP连接。后一个连接称为前一个连接的化身(incarnation)。TCP为了防止某个连接的老的重复分组在该连接终止后再现,从而误解为属于同一个连接的某个新的化身。TCP将不给处于TIME_WAIT状态的连接发起新的化身。TIME_WAIT的持续时间为2MSL,足够让老的重复分组被丢弃。

5.工具
tcpdump抓包参考tcpdump/wireshark 抓包及分析

  • docker安装centos
# 拉取image到本地
docker pull centos:7
# 以image构建容器
docker run -d --name centos7 centos:7 -sleep 3600d
# 进入容器
docker exec -it centos7 bash
# 进入容器后安装必须软件
yum install net-tools
yum install wget
yum install tcpdump
  • tcpdump分析

开两个窗口

# 一个窗口发起http请求
wget http://example.com
# 另一个窗口抓包
tcpdump -n -S -i eth0 host example.com

显示

[root@afd5a8e9ff36 /]# tcpdump -n -S -i eth0 host example.com
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

# 三次握手
15:12:29.164793 IP 172.17.0.2.53836 > 93.184.216.34.http: Flags [S], seq 15566632, win 29200, options [mss 1460,sackOK,TS val 128735 ecr 0,nop,wscale 7], length 0
15:12:29.518988 IP 93.184.216.34.http > 172.17.0.2.53836: Flags [S.], seq 452882384, ack 15566633, win 65535, options [mss 1460,wscale 2,eol], length 0
15:12:29.519107 IP 172.17.0.2.53836 > 93.184.216.34.http: Flags [.], ack 452882385, win 229, length 0

# 传送数据
15:12:29.519440 IP 172.17.0.2.53836 > 93.184.216.34.http: Flags [P.], seq 15566633:15566742, ack 452882385, win 229, length 109: HTTP: GET / HTTP/1.1
15:12:29.520037 IP 93.184.216.34.http > 172.17.0.2.53836: Flags [.], ack 15566742, win 65535, length 0
15:12:29.827035 IP 93.184.216.34.http > 172.17.0.2.53836: Flags [P.], seq 452882385:452883845, ack 15566742, win 65535, length 1460: HTTP: HTTP/1.1 200 OK
15:12:29.827055 IP 172.17.0.2.53836 > 93.184.216.34.http: Flags [.], ack 452883845, win 251, length 0
15:12:29.827091 IP 93.184.216.34.http > 172.17.0.2.53836: Flags [P.], seq 452883845:452883963, ack 15566742, win 65535, length 118: HTTP
15:12:29.827101 IP 172.17.0.2.53836 > 93.184.216.34.http: Flags [.], ack 452883963, win 251, length 0

# 四次挥手
15:12:29.827874 IP 172.17.0.2.53836 > 93.184.216.34.http: Flags [F.], seq 15566742, ack 452883963, win 251, length 0
15:12:29.828203 IP 93.184.216.34.http > 172.17.0.2.53836: Flags [.], ack 15566743, win 65535, length 0
15:12:30.074756 IP 93.184.216.34.http > 172.17.0.2.53836: Flags [F.], seq 452883963, ack 15566743, win 65535, length 0
15:12:30.074806 IP 172.17.0.2.53836 > 93.184.216.34.http: Flags [.], ack 452883964, win 251, length 0
# 导出到文件
tcpdump -n -S -i eth0 host example -w example.pcap
# 读入文件
tcpdump -r example.pcap
yum install iproute iproute-doc
net-tools和iproute2对别

引用

https://meik2333.com/posts/tcp-connection/
https://linoxide.com/linux-command/use-ip-command-linux

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341