网络初窥

今天跟大家分享的是,自己对网络协议的理解。主要介绍网络协议中的,数据链路层,网络层,和传输层。

四层协议的概述

1.购物与四层协议

2.各层协议如何相互协作--封装,分用 (组包,拆包)

数据链路层

1.以太网帧报文头

2.arp协议,及演示

3.两台电脑如何mac地址进行通讯的

网络层

1.ip头部 ip地址 公网 私网

2.路由表

3.nat网络转换协议

4.ip路由观察

5.ip分片观察

介绍传输层(只介绍TCP)

1.tcp报文头

2.三次握手与socket

3.请求序列号,确认序列号,已经超时重传

4.socket与三层协议的关系及几个问题


四层协议的概述

1.购物与四层协议

网络初窥_第1张图片
购物与四层协议

先通过一个故事来简单描述一下四层协议的各自功能。

家里要买一个40米的大佛像,到了店铺a(邯郸),选好了样式,店铺a告知要从店铺b(广州)运货回来。于是就有了以下运佛的故事。

我们先看两个店铺(传输层)做了些什么?

总的来说就是稳定的端对端(广州  [源]--邯郸 [目的地])传输

1.店铺a先给店铺b打了个电话,更准确的说应该不是打电话,而是写信,走快递,来回三次信件(三次握手),沟通了一下佛像运输问题,要分块运输(MSS),以及店铺a本地的仓储大小(window);

2.店铺b通过快递公司,把一块佛像寄送给店铺a,店铺a收到后立马给店铺b打了个电话,告知已经收到(数据接收确认报文);

3.一次一辆装载佛像的汽车自燃了,店铺b很久(超时时间)没有收到店铺a的回复电话,就立马把这块佛像又发了一遍。(丢包重发)

4.最后店铺a收到了所有的佛像块,组装成了40米的大佛(数据有序组装)。

5.一次店铺a收到了序号为5,6,9,8序号的佛块(无序接收),最后店铺a直接打电话回复收到9号了(不用每次都回复,可以一批回复一次)

接着我们看看快递公司(网络层)做了些什么?

总的来说是不稳定的端对端传输

1.快递公司看了看快递(不关心发的是什么),发现一车可以装下,就不需要再分块了(ip分片);

2.广州快递公司看了看目的地邯郸(ip),就发送到了最近的快递中心,比如说是福建福州快递中心,福州中心又发送到了杭州中心,。。。到了北京中心,北京中心又发给石家庄中心,最后石家庄发给了邯郸中心,邯郸中心发现地址就在本市(ip在本局域网),就收下了快递。(路由)

最后我们看看快递员(数据链路层)做了些什么?

不稳定的点对点传输(石家庄-邯郸)

1.比如说石家庄快递员收到快递,发现目的地是邯郸,然后用百度地图定位(arp),根据导航送货到了邯郸中心。

最后出现了网上购物(应用层,http),我们不需要再和店铺打交道了。


2.各层协议如何相互协作--封装,分用 (组包,拆包)

现在了解了各层协议的大概功能,我再看看,各个协议之间是如何协作的?


网络初窥_第2张图片
封装过程

数据到达物理网络之前,会自上到下通过协议栈,每层协议都是通过添加自己的头部信息来实现本层协议的。



网络初窥_第3张图片
分用过程图

当帧到达主机,会沿着协议栈自底向上依次传递,各协议层通过处理帧中本层负责的头部数据,实现本层功能,并将帧上传到上层协议,直到应用程序。由此看出,只要我们掌握了各个头部信息,就能掌握各层的功能。


数据链路层

1.以太网帧报文


网络初窥_第4张图片
以太网帧报文

可以看出以太网帧限制了数据的大小最大为1500字节,这就是为什么ip层要分片。

2.arp协议,及演示

arp协议就是通过ip地址获取mac地址的报文。先看演示

先查看本地arp缓存表


网络初窥_第5张图片
本地arp缓存表

没有目的IP,接着我们用tcpdump监听,同时ping 10.252.68.118


网络初窥_第6张图片
arp协议监听

红色部分就是arp请求,和arp应答。

最后我们再看本地arp缓存发现目的地址已经缓存到arp缓存表中。


网络初窥_第7张图片
本地arp缓存表


3.两台电脑如何mac地址进行通讯的

网络初窥_第8张图片
mac地址通信

1.交换机如何工作的

线路上传输的是以太网帧(实际还有一层),以太网帧头部有源和目的地。

交换机工作原理:交换机维护了一张主机mac地址和交换机接口对应关系表。交换机在收到数据帧以后,会先记录数据帧中的源MAC的地址和对应的接口到表中,然后查看MAC地址表中是否有目标MAC地址的信息,如果有则将数据帧发送到对应的接口(单播),如果没有则将数据从非接收口发出去(广播)

2.两个用户之间信息传输流程

用户1想发送消息给用户2.并且知道了用户2的ip地址。

     1.用户1查看arp缓存表,如果找到则直接发送,如果没有则发送一个arp请求(广播)。询问ipxxx的mac地址是多少?

     2.交换机发现是广播,则将数据从非接收口发出。

    3.用户2发现ip地址与自己相同,则将自己的mac地址发送给用户1

   4.用户1收到后将mac地址存入arp缓存表中

3.如何获得ip

1.用户1的DHCP客户端(操作系统中的程序)先发送一个广播,寻找DHCP服务器。交换机收到报文,得到用户1的mac地址,与其端口绑定。交换机发现是广播,将消息分别发送到f1 f2接口(f0是报文发送方,不用再发送),特定格式的报文,只有DHCP服务器会回应。

2.DHCP服务器收到报文,从IP池中选址一个空闲IP地址,对应的网络掩码,缺省网关,域名服务器IP(DNS)。因为已经知道用户1的mac地址,就可以直接发送给用户1了。


网络层

IP头部


网络初窥_第9张图片
ip头部

16位总长度整个IP数据报的长度,但受MTU限制最大1480个长度,(ip头部20个字节)

16位标识唯一表示一次发送的数据报,数据包分片时,所有的分片数据中的16位唯一标识都一样

3位分片标志,第一位保留,第二位表示禁止分片,第三位表示更多分片,指这个分片后面还有分片,除了最后一个分片,其它都是1.

13位偏移,指的是数据偏移,实际偏移量是 13左移动3位,分片报文长度必须是8的倍数

8位协议 icmp 1 tcp 6 udp 17

IP地址:Ip=网段号+主机号

例如:10.252.71.172netmask255.255.252.0

网络初窥_第10张图片
ip地址

ip分为公有ip,私有ip,公有ip是全球唯一的,私有ip用局域网。

3个预留私有地址:

10.0.0.0– 10.255.255.255

172.16.0.0– 172.31.255.255

192.168.0.0– 192.168.255.255

IP路由

网络初窥_第11张图片
路由表

我们本机和路由器上都有路由表,主要功能是告诉计算机,要去目的地,下一跳怎么走。

路由选择过程:

1.完全匹配ip,没有匹配到走2

2.匹配相同网段,没有匹配到走3

3.默认路由网关

使用traceroute 查看跳转路径

网络初窥_第12张图片
traceroute观察跳转路径

traceroute 如果有**号,一般是服务器屏蔽了icmp报文,

traceroute 原理。 前面我们介绍ip头部时介绍过ttl也就是time to live, traceroute就是根据ttl,第一次发送时ttl为1,第二次为2,依次递推。 因为ttl每跳一次就会减1,做减法的路由器发现ttl为0时,就停止了转发,并向源发送主机,发送一条icmp报文,告述源主机报文失效了,这样我们就可以获得每个节点的路由器了。

网络初窥_第13张图片
跨网段通讯

了解了链路层,我们就可以把互联网的两个主机通讯串起来了。下面介绍一下,用户a是如何把一条以太网帧通过交换机,路由器,互联传送给服务器的。

1.用户a主机的ip层查看目的ip地址,从本地路由表中得出下一跳要去网关,于是ip地址写src:10.1.1.2 ,dst:4.4.4.4,mac地址写:src: aa-aa-aa-aa-aa-aa dst: bb-bb-bb-bb-bb-bb.

2.路由器发现目的ip不是本局域网,查路由表,下一跳到运营商路由器。ip地址写到 src:2.2.2.2 dst:4.4.4.4     mac地址写: src:bb-bb-bb-bb-bb-bb dst:运营商路由器mac地址。

3.多次跳转后到了目的主机的路由器,最后到了目的主机。


如果在同一个局域网中,有两个人同时访问了同一个远程服务,由于从路由器出去时把私有ip转换为公有ip,那么怎么区分发出请求的是哪台电脑?

于是就用到了nat转换

网络初窥_第14张图片
nat转换表

从图中看出,路由器为每个机器分配了不同的路由器端口号,来区分。


IP切片

网络初窥_第15张图片
ip切片

如图,如果我们要发送一个data为1473字节的icmp报文,就会被ip网络层切分成2和3两部分。演示如下:

网络初窥_第16张图片
ip切片演示

传输层(只介绍TCP)

网络初窥_第17张图片
tcp头部

SYN表示建立连接,

FIN表示关闭连接,

ACK表示响应,

PSH表示有 DATA数据传输,

RST表示连接重置。

URG紧急数据

因为有可选字节,所以需要头部报文长度

32位序号:我已经发送多少字节数据(不包括本次)

32位确认序号:我已经接收了多少字节数据。

MSS

MSS:Maxitum Segment Size 最大分段大小,分段的原因,为了能丢包重发(最小代价),只发丢失的,不用全发。

MTU: Maxitum Transmission Unit 最大传输单元

三次握手与socket函数

网络初窥_第18张图片
三次握手与socket

1.三次握手与socket函数

connect 在第二次通讯后返回,accept在第三次返回。

2.如果第三次回复丢失,如何处理?查到的理论知识,有兴趣的同学可以去查证一下

     1.超时时间内发送数据,既然已经发送数据,说明ack已经发了,可以正常链接

      2.超时时间内没有发送数据RST

3为什么是3次?

为什么是三次,不是两次 为了防止已过期的syn请求被服务器接收后占用服务器资源,已过期是指客户端先发了个syn请求,服务器没响应,然后客户端再发一次,成功和服务器通讯,并断开了链接。这时候第一次请求到了,服务器以为是新的请求,就分配了链接资源。同时三次也能证明双方的发送和接收是都没有问题的。

四次挥手发两次fin,是因为tcp是全双工的,双向发送,fin只能关闭自己的发送。


网络初窥_第19张图片
失败重传wireshark


网络初窥_第20张图片
socket与网络协议关系


socket就是一个 网络编程接口

socket帮我们封装了传输层,网络层,数据链路层的实现

问题

•1.服务器accept接收到的套接字会不会占用主机端口号?

•2.服务器最大长连接数是多少?

•3.服务器如何实现几十万,上百万的长连接数?(不考虑内存,cpu)

你可能感兴趣的:(网络初窥)