0%

TCP learn

Headers

Connection Management

State Tansition Diagram

Sequence Diagram

Normal

Simultaneous Open

Simultaneous Close

Half Close

Normal with State

Examples

server:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
In [1]: import socket

In [2]: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

In [3]: s.bind(('localhost', 30002))

In [4]: s.listen(5)

In [5]: conn, addr = s.accept()

In [6]: conn.send(b'who are you')
Out[6]: 11

In [7]: conn.recv(1024)
Out[7]: b'hello world'

In [8]: conn.recv(1024)
Out[8]: b''

In [9]: conn.close()

client

1
2
3
4
5
6
7
8
9
10
11
12
13
In [1]: import socket

In [2]: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

In [3]: s.connect(('localhost', 30002))

In [4]: s.send(b'hello world')
Out[4]: 11

In [5]: s.recv(1024)
Out[5]: b'who are you'

In [6]: s.close()

netstat

1
2
3
4
5
6
7
8
9
10
11
12
13
$ netstat -tan | grep 30002
tcp 0 0 127.0.0.1:30002 0.0.0.0:* LISTEN
$ netstat -tan | grep 30002
tcp 0 0 127.0.0.1:30002 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:30002 127.0.0.1:48496 ESTABLISHED
tcp 0 0 127.0.0.1:48496 127.0.0.1:30002 ESTABLISHED
$ netstat -tan | grep 30002
tcp 0 0 127.0.0.1:30002 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:30002 127.0.0.1:48496 CLOSE_WAIT
tcp 0 0 127.0.0.1:48496 127.0.0.1:30002 FIN_WAIT2
$ netstat -tan | grep 30002
tcp 0 0 127.0.0.1:30002 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:48496 127.0.0.1:30002 TIME_WAIT

tcpdump

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
$ sudo tcpdump -ilo "tcp and port 30002" -v -X
tcpdump: listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
17:41:56.089133 IP (tos 0x0, ttl 64, id 29424, offset 0, flags [DF], proto TCP (6), length 60)
localhost.48496 > localhost.30002: Flags [S], cksum 0xfe30 (incorrect -> 0xc989), seq 310491251, win 43690, options [mss 65495,sackOK,TS val 327862915 ecr 0,nop,wscale 7], length 0
0x0000: 4500 003c 72f0 4000 4006 c9c9 7f00 0001 E..<r.@.@.......
0x0010: 7f00 0001 bd70 7532 1281 b873 0000 0000 .....pu2...s....
0x0020: a002 aaaa fe30 0000 0204 ffd7 0402 080a .....0..........
0x0030: 138a ca83 0000 0000 0103 0307 ............
17:41:56.089145 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
localhost.30002 > localhost.48496: Flags [S.], cksum 0xfe30 (incorrect -> 0x8343), seq 33121838, ack 310491252, win 43690, options [mss 65495,sackOK,TS val 327862915 ecr 327862915,nop,wscale 7], length 0
0x0000: 4500 003c 0000 4000 4006 3cba 7f00 0001 E..<..@.@.<.....
0x0010: 7f00 0001 7532 bd70 01f9 662e 1281 b874 ....u2.p..f....t
0x0020: a012 aaaa fe30 0000 0204 ffd7 0402 080a .....0..........
0x0030: 138a ca83 138a ca83 0103 0307 ............
17:41:56.089155 IP (tos 0x0, ttl 64, id 29425, offset 0, flags [DF], proto TCP (6), length 52)
localhost.48496 > localhost.30002: Flags [.], cksum 0xfe28 (incorrect -> 0x5588), ack 1, win 342, options [nop,nop,TS val 327862915 ecr 327862915], length 0
0x0000: 4500 0034 72f1 4000 4006 c9d0 7f00 0001 E..4r.@.@.......
0x0010: 7f00 0001 bd70 7532 1281 b874 01f9 662f .....pu2...t..f/
0x0020: 8010 0156 fe28 0000 0101 080a 138a ca83 ...V.(..........
0x0030: 138a ca83 ....
17:42:16.978059 IP (tos 0x0, ttl 64, id 29426, offset 0, flags [DF], proto TCP (6), length 63)
localhost.48496 > localhost.30002: Flags [P.], cksum 0xfe33 (incorrect -> 0xaf40), seq 1:12, ack 1, win 342, options [nop,nop,TS val 327868137 ecr 327862915], length 11
0x0000: 4500 003f 72f2 4000 4006 c9c4 7f00 0001 E..?r.@.@.......
0x0010: 7f00 0001 bd70 7532 1281 b874 01f9 662f .....pu2...t..f/
0x0020: 8018 0156 fe33 0000 0101 080a 138a dee9 ...V.3..........
0x0030: 138a ca83 6865 6c6c 6f20 776f 726c 64 ....hello.world
17:42:16.978068 IP (tos 0x0, ttl 64, id 44204, offset 0, flags [DF], proto TCP (6), length 52)
localhost.30002 > localhost.48496: Flags [.], cksum 0xfe28 (incorrect -> 0x2cb1), ack 12, win 342, options [nop,nop,TS val 327868137 ecr 327868137], length 0
0x0000: 4500 0034 acac 4000 4006 9015 7f00 0001 E..4..@.@.......
0x0010: 7f00 0001 7532 bd70 01f9 662f 1281 b87f ....u2.p..f/....
0x0020: 8010 0156 fe28 0000 0101 080a 138a dee9 ...V.(..........
0x0030: 138a dee9 ....
17:42:26.921826 IP (tos 0x0, ttl 64, id 44205, offset 0, flags [DF], proto TCP (6), length 63)
localhost.30002 > localhost.48496: Flags [P.], cksum 0xfe33 (incorrect -> 0x875c), seq 1:12, ack 12, win 342, options [nop,nop,TS val 327870623 ecr 327868137], length 11
0x0000: 4500 003f acad 4000 4006 9009 7f00 0001 E..?..@.@.......
0x0010: 7f00 0001 7532 bd70 01f9 662f 1281 b87f ....u2.p..f/....
0x0020: 8018 0156 fe33 0000 0101 080a 138a e89f ...V.3..........
0x0030: 138a dee9 7768 6f20 6172 6520 796f 75 ....who.are.you
17:42:26.921835 IP (tos 0x0, ttl 64, id 29427, offset 0, flags [DF], proto TCP (6), length 52)
localhost.48496 > localhost.30002: Flags [.], cksum 0xfe28 (incorrect -> 0x193a), ack 12, win 342, options [nop,nop,TS val 327870623 ecr 327870623], length 0
0x0000: 4500 0034 72f3 4000 4006 c9ce 7f00 0001 E..4r.@.@.......
0x0010: 7f00 0001 bd70 7532 1281 b87f 01f9 663a .....pu2......f:
0x0020: 8010 0156 fe28 0000 0101 080a 138a e89f ...V.(..........
0x0030: 138a e89f ....
17:42:39.804551 IP (tos 0x0, ttl 64, id 29428, offset 0, flags [DF], proto TCP (6), length 52)
localhost.48496 > localhost.30002: Flags [F.], cksum 0xfe28 (incorrect -> 0x0ca4), seq 12, ack 12, win 342, options [nop,nop,TS val 327873844 ecr 327870623], length 0
0x0000: 4500 0034 72f4 4000 4006 c9cd 7f00 0001 E..4r.@.@.......
0x0010: 7f00 0001 bd70 7532 1281 b87f 01f9 663a .....pu2......f:
0x0020: 8011 0156 fe28 0000 0101 080a 138a f534 ...V.(.........4
0x0030: 138a e89f ....
17:42:39.843347 IP (tos 0x0, ttl 64, id 44206, offset 0, flags [DF], proto TCP (6), length 52)
localhost.30002 > localhost.48496: Flags [.], cksum 0xfe28 (incorrect -> 0x0005), ack 13, win 342, options [nop,nop,TS val 327873854 ecr 327873844], length 0
0x0000: 4500 0034 acae 4000 4006 9013 7f00 0001 E..4..@.@.......
0x0010: 7f00 0001 7532 bd70 01f9 663a 1281 b880 ....u2.p..f:....
0x0020: 8010 0156 fe28 0000 0101 080a 138a f53e ...V.(.........>
0x0030: 138a f534 ...4
17:42:51.138882 IP (tos 0x0, ttl 64, id 44207, offset 0, flags [DF], proto TCP (6), length 52)
localhost.30002 > localhost.48496: Flags [F.], cksum 0xfe28 (incorrect -> 0xf4fc), seq 12, ack 13, win 342, options [nop,nop,TS val 327876677 ecr 327873844], length 0
0x0000: 4500 0034 acaf 4000 4006 9012 7f00 0001 E..4..@.@.......
0x0010: 7f00 0001 7532 bd70 01f9 663a 1281 b880 ....u2.p..f:....
0x0020: 8011 0156 fe28 0000 0101 080a 138b 0045 ...V.(.........E
0x0030: 138a f534 ...4
17:42:51.138897 IP (tos 0x0, ttl 64, id 27317, offset 0, flags [DF], proto TCP (6), length 52)
localhost.48496 > localhost.30002: Flags [.], cksum 0xe9eb (correct), ack 13, win 342, options [nop,nop,TS val 327876677 ecr 327876677], length 0
0x0000: 4500 0034 6ab5 4000 4006 d20c 7f00 0001 E..4j.@.@.......
0x0010: 7f00 0001 bd70 7532 1281 b880 01f9 663b .....pu2......f;
0x0020: 8010 0156 e9eb 0000 0101 080a 138b 0045 ...V...........E
0x0030: 138b 0045 ...E