TCP/IP

168 阅读2分钟

1. Socket与TCP/IP协议族的关系

数据链路层、网络层、传输层协议是在内核中实现的。因此操作系统需要实现一组系统调用,使得应用程序能够访问这些协议提供的服务。实现这组系统调用的API就是socket(还有一个XTI已经不再使用)。 由Socket定义的这一组API提供如下两点中能:一是将应用程序数据从用户缓冲区中复制到TCP/UDP内核发送缓冲区,以交付内核来发送数据(send函数),或者是从内核TCP/UDP接收缓冲区中复制数据到用户缓冲区,以读取数据;二是应用程序可以通过它们来修改内核中各层协议的某些头部信息或其他数据结构,从而精细地控制底层通信的行为。比如可以通过setsockopt函数来设置IP数据报在网络上的存活时间。 值得一提的是,socket是一套通用网络编程接口,不但可以访问内核中TCP/IP协议栈,而且可以访问其他网络协议栈(比如X.25协议栈,UNIX本地域协议栈等)。

2. 使用tcpdump命令查看ARP报文

# tcpdump -i eth0 -ent '(dst 10.68.161.104 and src 10.68.163.41) or (dst 10.68.163.41 and src 10.68.163.41)'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
fa:16:3e:d1:d5:16 > Broadcast, ethertype ARP (0x0806), length 42: Request who-has 10.68.161.104 tell 10.68.163.41, length 28

fa:16:3e:d1:d5:16 > fa:16:3e:cc:bc:0b, ethertype ARP (0x0806), length 42: Reply 10.68.163.41 is-at fa:16:3e:d1:d5:16, length 28

3. host命令查询DNS

# host -t A www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 220.181.38.149
www.a.shifen.com has address 220.181.38.150

4. tcpdump观察DNS通信过程

# tcpdump -i eth0 -nt -s 500 port domain
# host -t A www.baidu.com
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 500 bytes
IP 10.68.186.21.43452 > 10.68.248.194.53: 10375+ [1au] A? www.a.shifen.com. (45)
IP 10.68.248.194.53 > 10.68.186.21.43452: 10375 2/0/1 A 220.181.38.149, A 220.181.38.150 (77)