TCP/IP四层模型
2021-11-27 大约 3 分钟
# TCP/IP四层模型
# 应用层:
http,ssh等协议
# 传输层:tcp协议面向连接(三次握手),可靠的传输
建立连接
exec 8<> /dev/tcp/www.baidu.com/80
- 8是文件描述符,指向一个操作系统socket连接的输入输出流
- socket:即ip+port<->ip + port映射, 可通过
netsat -nacp
查看。每个socket是隔离的, 双向维度确认一个唯一的连接,也就是客户端的同一个端口可以连接到不同的服务端。 - exec:用exec后面的命令替换shell 程序,退出shell的死循环,结束线程。不给出命令,可以绑定文件描述符
- socket可以绑定一个文件描述符,最终会交给进程开辟资源建立连接
发送http协议
echo -e "GET / HTTP/1.0\n" 1>& 8
读出数据
cat 0<& 8
原理:三次握手(保证双方通信正常syn+ack,之后开辟资源,内核中),四次分手fin +ack多一次是服务端要确认可不可以断开),连接成功后开辟资源(fork进程)不可分割。
每一个传输层连接唯一地被通信两端的两个端点(即两个套接字)所确定。
tcpdump -nn -i eth0 port 80
抓包
tcpdump的选项介绍
-a 将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息,包括源mac和目的mac,以及网络层的协议;
-f 将外部的Internet地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n 指定将每个监听到数据包中的域名转换成IP地址后显示,不把网络地址转换成名字;
-nn: 指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
-t 在输出的每一行不打印时间戳;
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv 输出详细的报文信息;
-c 在收到指定的包的数目后,tcpdump就会停止;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i 指定监听的网络接口;
-p: 将网卡设置为非混杂模式,不能与host或broadcast一起使用
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-w 直接将包写入文件中,并不分析和打印出来;
-s snaplen snaplen表示从一个包中截取的字节数。0表示包不截断,抓完整的数据包。默认的话 tcpdump 只显示部分数据包,默认68字节。
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)
-X 告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器
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
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
# 网络层:ip协议(网络号和主机号),路由表
ip地址/etc/sysconfig/network-scripts/ifconfig/eth0
route表:route -n
端到端
# 链接层:arp协议
节点到节点
arp协议询问ip地址和mac地址的关系