linux mysql tcp udp_如何理解tcp是面向连接,udp是无连接

问及tcp,udp的区别,稍微懂一些网络协议的人都会说tcp是面向连接的而udp是无连接的。

那到底如何还理解这里的连接呢?tcp/ip又是如何实现的?

实践是最好的方法。首先看下tcp如何三次握手。

[redfoxzheng@~ 17:31:04]$ netcat -l -p 10001 -s 10.6.207.88

[redfoxzheng@~ 17:28:56]$ telnet 10.6.207.88 10001

[redfoxzheng@~ 17:27:59]$ sudo /usr/sbin/tcpdump -i eth1 port 10001

输出如下:

1>>>17:31:17.291631 IP 10.6.207.32.49920 > 10.6.207.88.scp-config: S 1285475417:1285475417(0) win 5840

2>>>17:31:17.291826 IP 10.6.207.88.scp-config > 10.6.207.32.49920: S 500699789:500699789(0) ack 1285475418 win 5792

3>>>17:31:17.291848 IP 10.6.207.32.49920 > 10.6.207.88.scp-config: . ack 1 win 1460

第一次握手,10.6.207.32向10.6.207.88发了一个syn同步包。其中包含哪些信息呢?首先是1285475417:1285475417(0)序列号。tcp协议中有过定义,tcp对传输的每一个字节都分配了一个序列号。由于这是一个syn包,没有有效载荷的数据,因此括号中是0。win5840,通知10.6.207.88发送方的滑动窗口大小。mss1460,表示mtu大小。

第二次握手,10.6.207.88给10.6.207.32回了一个ack应答包。500699789:500699789(0) 含义同上。ack 1285475418 这个就是syn包序列号+1。win,mss含义相同。

第三次握手,10.6.207.32给10.6.207.88回了一个ack应答包。至此tcp连接建立成功。

210ab438507c88f672f9de4c83fe6fab.png

再看一下是如何传输的。

在telnet终端输入三个a,回车。

1>>>17:45:37.504348 IP 10.6.207.32.49920 > 10.6.207.88.scp-config: P 1:6(5) ack 1 win 1460

2>>>17:45:37.504526 IP 10.6.207.88.scp-config > 10.6.207.32.49920: . ack 6 win 1448

对于第一行,我们抓包看到88收到来自32的数据包。数据包大小是1:6(5),5个字节,这里包含了回车换行。P表示PSH设置为1,告诉内核将数据尽快交给应用层。

不要奇怪为什么还有第二行。32给88回了一个ack应答包。这里就体现了tcp是面向连接的。32给88回一个ack告诉88这个包已经收到,且是正确的,ack 6。

也就是说tcp传输段数据至少要有两个包。ack这个包可能会和数据包合并。

下面看下tcp如何关闭连接。

1>>>17:52:18.958059 IP 10.6.207.32.49920 > 10.6.207.88.scp-config: F 6:6(0) ack 1 win 1460

2>>>17:52:18.958242 IP 10.6.207.88.scp-config > 10.6.207.32.49920: F 1:1(0) ack 7 win 1448

3>>>17:52:18.958260 IP 10.6.207.32.49920 > 10.6.207.88.scp-config: . ack 2 win 1460

tcp关闭连接需要四次握手,这里我们抓到只有3个包,主要是将第二个fin包和ack包合并了。

32发送一个fin包给88, 88收到fin包,应该发一个ack给32,然后再发一个fin包。这里将这两个包合并。最后32收到88的fin包,发送一个ack,至此连接完全关闭。

5a8d23b641cb54074b99989f68a47fdc.png

再看下udp传输。

[redfoxzheng@~ 17:52:18]$ netcat -l -u -p 10001 -s 10.6.207.88

[redfoxzheng@~ 17:57:13]$ netcat -u 10.6.207.88 10001

aaa

tcpdump输出:

17:58:10.559974 IP 10.6.207.32.32824 > 10.6.207.88.scp-config: UDP, length 4

32就把这个udp包扔给了88。其中不涉及到任何双方的校验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值