TCP/IP四层模型

2021-11-27 大约 3 分钟

# TCP/IP四层模型

# 应用层:

http,ssh等协议

# 传输层:tcp协议面向连接(三次握手),可靠的传输

  1. 建立连接exec 8<> /dev/tcp/www.baidu.com/80

    • 8是文件描述符,指向一个操作系统socket连接的输入输出流
    • socket:即ip+port<->ip + port映射, 可通过netsat -nacp查看。每个socket是隔离的, 双向维度确认一个唯一的连接,也就是客户端的同一个端口可以连接到不同的服务端。
    • exec:用exec后面的命令替换shell 程序,退出shell的死循环,结束线程。不给出命令,可以绑定文件描述符
    • socket可以绑定一个文件描述符,最终会交给进程开辟资源建立连接
  2. 发送http协议echo -e "GET / HTTP/1.0\n" 1>& 8

  3. 读出数据cat 0<& 8

  4. 原理:三次握手(保证双方通信正常syn+ack,之后开辟资源,内核中),四次分手fin +ack多一次是服务端要确认可不可以断开),连接成功后开辟资源(fork进程)不可分割。

  5. 每一个传输层连接唯一地被通信两端的两个端点(即两个套接字)所确定。

  6. 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

# 网络层:ip协议(网络号和主机号),路由表

ip地址/etc/sysconfig/network-scripts/ifconfig/eth0

route表:route -n

端到端

# 链接层:arp协议

节点到节点

arp协议询问ip地址和mac地址的关系

上次编辑于: 2021年12月21日 14:30