TCP/IP协议总结(马士兵教育)

一. 应用层

模拟和百度进行通讯:

1.建立连接(内核去做的)

exec 8<> /dev/tcp/www.baidu.com/80 

#含义: /dev/tcp/www.baidu.com/80:与百度的80端口通过socket技术建立了tcp连接,用8去指向了这个连接,从连接中可以拿到输入流和输出流       # 8<>  相当于是一个输入输出流的channel(通道),8就是文件描述符.

# exec [-cl] [-a 名称] [命令 [参数 ...]] [重定向 ...]  这个用法会用指定命令去替换shell.只不过上面那句话中没有[命令]这个选项,只是添加了一个重定向.可以通过cd /proc/$$/fd 中找到这个重定向.     #$$代表当前解释程序(应该指的是一个终端窗口),fd文件描述符.  可以echo $$看出这个解释程序的进程号.

2.http通讯(用户去做)

echo -e "GET / HTTP/1.0\n" 1>& 8  #/表示主页,-e能够让\n得到转义,1表示echo的标准输出, 后面是重定向到前面定义的8中. 注意这里, > 到文件;    >& 到文件描述符.

3.读取百度回复的消息(用户去做的)

cat 0<& 8

cd /proc/$$/fd #$$代表当前解释程序(应该指的是一个终端窗口),fd文件描述符.

shell:外壳,相对于内核来说的.

二.传输控制层(TCP/IP)

1.TCP:

面向连接, 可靠的传输.

为什么握手要三次?

socket的IO通讯是双向的,两对syn+ack,分别表示客户端确认自己发送的消息服务端能够收到,以及服务端发送的客服端能够收到.

三次握手之后,双方开辟了资源.

2.linux中查看网络状态

  ssh:secure shell,安全外壳协议,应用层协议.ftp,telnet本质上是不安全的.

 这里的Local Address就是代表的你说连接到的linux服务器,而Foreign Address表示对端地址.

上面的是每个socket对应一个进程,而多个socket对应一个进程就是 多路复用器 (select, poll, epoll).

3.抓取访问百度过程(通过curl www.baidu.com)的数据包,验证3次握手和四次分手.

  其中[S]代表的是SYN,[.]代表的是ACK.[F]代表FIN.

中间的部分表示数据传输,一开始是1440字节,然后客户端给一个确认;接着是1341字节,然后客户端给一个确认.(因为数据包的大小是有限制的,比如图中说的[mss 1460])

三.网络层和数据链路层

 IP地址 & 子网掩码得到网络号;

理解路由表中表示的含义:

如果要访问百度的ip,拿百度的ip去和路由表中的子网掩码进行按位与操作, 得到的结果跟路由表中的Destination列的值去进行匹配.这里只有和0.0.0.0去按位与得到0.0.0.0可以与第一条匹配上,这个时候就去找对应的Gateway,这里是192.168.121.2.然后网站再去找到百度的地址.

而访问本局域网中的ip,和255.255.255.0按位与之后,得到的是网络号,它对应的网关是0.0.0.0,表示不需要通过网关转发.

在传输过程中,数据包中究竟需要存储目标ip的地址还是下一跳的地址呢?

实际上存储的是目标ip,只不过在数据包外层要封装下一跳的mac地址

查看arp表中的内容:

arp -a

删除网关的mac地址,再去请求外网:

arp -d 192.168.121.2 && curl www.qq.com

tcpdump -nn -i ens33 port 80 or arp

 

 发现会先进行arp请求,找到网关的mac地址,再去进行三次握手和四次分手的过程.

手动添加网关,理解网关的含义

假如原先主机A(192.168.121.4)和主机B(192.168.121.1)是同一个网段,此时它们两个是可以互相访问的.现在在主机B上添加一个ip地址ipB2,比如说是192.168.88.88(通过ifconfig ens33:0 192.168.88.88 netmask 255.255.255.0 up),此时主机A是访问不到该地址的.因为主机A的路由表中并没有到此地址的路由.如下图所示,是主机A的路由表,在ping 192.168.88.88时,会对子网掩码进行与运算,匹配到192.168.121.2(下一跳地址),但是121.2并不能够找到88.88,所以无法去访问.

在主机A中可以通过人为添加路由的方式,来找到88.88地址.方式如下:

 

告诉主机A,如果要访问88.88可以通过121.1.

猜你喜欢

转载自www.cnblogs.com/Stephen-Qin/p/12858812.html