一、请你分别画画OSI的七层网络结构图,和TCP/IP的五层结构图?
OSI的七层结构图是制定的标准,但是在现实中并没有被广泛采用;TCP/IP的5层是为了方便学习而假设出来的;现实中广泛使用的是TCP/IP的四层网络结构图。
以TCP/IP五层结构图来讲解:应用层主要是dns、http、ftp、smtp等应用层协议;运输层主要是tcp、udp协议;网络层主要是ip协议;数据链路层是MAC帧;物理层是010101的比特流。
1、应用层协议
我们常用的http、dns、ftp等应用层协议。
1.它们都有自己的报文格式(请求报文和响应报文),报文有自己的语法、含义。
2.应用层协议都有自己的端口,如http为80,ftp为21,ssh为22,smtp为25,dns为53,https为443。
3.应用层协议的报文传输依赖下面的运输层协议tcp或udp来进行传输。
1.1、http协议
这时候我们来理解各种协议就很容易了。如http协议:下面使用http://www.kongfz.com
的请求和响应报文来举例。
GET http://www.kongfz.com/ HTTP/1.1
Host: www.kongfz.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
DNT: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ja;q=0.8,zh-CN;q=0.7,zh;q=0.6
Cookie: acw_tc=7b39758315366525831781305e07127bc2496e172c5bae202bda3e35c76e72; kfz_uuid=0147d2f0-1626-4a30-9109-89bc69daa209; shoppingCartSessionId=3ce70b7ecc16ff4b0f5cbe4a35371d73; reciever_area=1006000000; PHPSESSID=m0m8apquke28uscf2usiam9ouc1uveko; kfz_trace=0147d2f0-1626-4a30-9109-89bc69daa209|0|20d476e6329fb229|-; kfz-tid=0502f82d47b9978735efd2b427a4babb; Hm_lvt_bca7840de7b518b3c5e6c6d73ca2662c=1538441986,1538464530,1538634990,1538703246; Hm_lpvt_bca7840de7b518b3c5e6c6d73ca2662c=1538703246; Hm_lvt_33be6c04e0febc7531a1315c9594b136=1538441986,1538464530,1538634990,1538703246; Hm_lpvt_33be6c04e0febc7531a1315c9594b136=1538703246
If-None-Match: W/"5bb6bf4e-46d7d"
If-Modified-Since: Fri, 05 Oct 2018 01:33:02 GMT
请求报文的格式:
第一行为状态行,表明请求的方法,请求的网址,使用的http协议版本。
中间就是请求发送的各种头部信息,都是k-v对。
最后就是请求的内容,这里没有,如果我们提交表单或上传什么数据的话,就会有请求内容这一块。
HTTP/1.1 304 Not Modified
Date: Fri, 05 Oct 2018 01:34:12 GMT
Connection: keep-alive
Server: openresty
Last-Modified: Fri, 05 Oct 2018 01:33:02 GMT
ETag: "5bb6bf4e-46d7d"
响应的html文档省略...
响应报文的格式:
第一行是状态行,表明http的协议版本,状态码及说明。
中间也是响应的头部信息。
最后就是响应的内容,这里是返回一个html页面,内容就不显示了。
1.2、dhcp协议
当我们连接WLAN时(家里的WIFI或者是学校的WLAN),我们查看网络属性可以看到都是自动获取ip地址。通过ipconfig
可以查看到自己被分配的ip。这就是动态主机配置协议。DHCP服务分配给客户端的ip地址是临时的,这很适合经常移动位置的计算机。
下层协议
http使用tcp协议,dns使用udp协议,ftp使用tcp协议,smtp使用tcp协议,dhcp使用udp协议。
2、运输层协议
2.1、UDP,用户数据报协议
- 无连接,尽最大努力的交付,没有拥塞控制
- 可能丢包,面向数据报
因为UDP没有拥塞控制,所以网络出现的拥塞也不会降低它的发送速率,使得其适用于实时性高的应用,如:网络电话、视频、游戏等。
接收方对UDP报文进行校验和的验证,如果不正确则丢弃。
2.2、TCP,传输控制协议
- 有连接,可靠的交付,有拥塞控制,面向字节流
1.停止等待协议。保证不丢包。
2.以字节为单位的滑动窗口
拥塞避免控制: 拥塞窗口是指字节滑动窗口,即TCP发送的报文(以字节为单位)。
1.设置慢开始门限为16;慢开始,指数增大,每一次是之前的2倍:1-2-4-8-16,到达门限值后,改为拥塞避免。
2.拥塞避免,使用加法增大,16-17-18---24,出现了超时情况。这时候认为网络拥塞。调整慢开始门限值为当前拥塞窗口的一半:12,并重新使用慢开始。
3.重新慢开始,1-2-4-8-12,到达门限值,改为拥塞避免。
4.拥塞避免,12-13-14-15-16,这时候连续收到3个ACK。说明个别报文在网络中丢失了,网络并没有出现拥塞。执行快恢复,而不是慢开始。把门限值调整为当前拥塞窗口的一半:8。并把拥塞窗口调整为8。
5.然后使用拥塞避免,8-9-10…直到碰到超时或连续的ACK情况。
一个概念是,网络中的拥塞情况是无法确定的,我们只能在实际中去探测当前拥塞窗口的一个门限值是多少。如果我们认为现在出现网络拥堵,就调整对应的门限值重新开始,这样下一次到达门限值时应该不会出现拥堵了。如果网络拥塞严重,就再调整门限值。使用一次次的门限降级,来避免加重网络拥塞的情况从而消除网络拥塞。当然,在降级后,还会一次次地加法增大,因为实际情况总是在不断变化的。一次次的门限升级可以使得网络的传输效率最大化。
3、网络层协议
IP协议
1.寻址与路由
- IP数据报通过路由选择协议来选择合适的转发路径,把该IP数据报转发到目的主机。
- 利用ARP协议,将IP地址和物理MAC地址相匹配,这样才能把IP数据报发送到物理主机上。
2.分段与重组
1.IP数据报通过不同类型的通信网络发送,IP数据报的大小会受到这些网络所规定的最大传输单元的限制。
2.将IP数据报拆分成一个个能够适合下层技术传输的小数据报,被分段后的IP数据报可以独立地在网络中进行转发,在到达目的主机后被重组,恢复成原来的IP数据报。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。