详细有七层
但是一般来说对我们开发来说归为五层
应用层的程序要准备某种协议的数据,在发送前,通过内核完成和别人的连接
什么是tcp
面向连接的 -》一定要聊三次握手
可靠的传输协议
当双方走完三次握手之后,双方会在自己的内存里开辟一个队列空间,里面有一些资源,比如socket等。双方有资源为对方服务,就是有了连接。
tcp保证一定能发送对,并且保证顺序。
我们拿到的数据其实是从内核拿的,数据可以是早就发过来的。
tcp在默认情况下,没有心跳,可以在内核中配置。但是这个对我们开发来说是不用特地设置的。
在linux系统下,我们可以使用tcpdump工具抓包查看三次握手四次挥手的过程
tcpdump -nn -i eth0 port 80 监听本地网卡eth0 的80端口,当我们在另一个终端执行curl www.baidu.com的时候,就会看到这个过程
什么是下一跳
什么是下一跳
我们使用route -n命令可以看到自己的网络配置信息,当我们准备访问一个页面的时候,比如ping百度。
这个时候我们们从dns上拿到百度的ip地址,然后,会按照上面的条目进行与运算(就是判断一下百度的ip和我们的ip是不是在一个局域网里)很明
显,前面两条都无法匹配。220.181.38.149分别于255.255.255.0和255.255.0.0做运算之后的结果和前面Destination无法对应,当与第
三条进行运算的时候,因为子网掩码是0.0.0.0,运算之后还是220.181.38.149,与前面的0.0.0.0能匹配上,那么就会走这一行的网关,也就
是192.168.150.2,这个网址就是下一跳,意味着我们只要把信息交给这个下一跳,我们就不用管了,他之后会不断的重复上面的过程,一直跳到
百度。gateway中0.0.0.0表示不需要下一跳,即在本地局域网中。
arp协议广播的过程
广播的过程只有两句
数据链路层为什么叫链路
当我们传输数据的时候,我们可以肯定,我们的ip是肯定不变的,也就是socket四元组不变,但是因为有下一跳的概念,我们的数据是不断发给下一跳的,那么我们就肯定需要不断换mac地址,因为下一个设备的mac地址是不断换的。所以这个样子就像我们数据结构的链路。
负载均衡
一种是nginx七层的,基于反向代理的
一种是lvs四层的
lvs四层负载均衡是不会和客户端建立三次握手的
nginx本身是一个web server,有七层,所以肯定会建立连接。