高并发负载均衡:网络协议原理(一)

一台主机最多65535个端口

一、OSI七层参考模型(客户端和服务端都有同样的七层模型)

软件工程学所强调的分层解耦:

  • 应用层:浏览器、tomcat、对外服务的软件
  • 表示层:字符串的语义、表示、加密
  • 会话层:session等
  • 传输控制层:如何连接如何传输的控制(连接失败还是成功)
  • 网络层:设备中如何路由数据怎么发
  • 链路层:写成一个什么样的协议、具体到写成什么样的东西能发过去
  • 物理层:wifi,4g,光纤等

好处:分层解耦,修改内容互不影响

二、TCP中的精简化

在这里插入图片描述
 协议:规定,TCP是一个面向连接的可靠地协议
  三次握手:
   -1.客户端对服务端请求连接,
   -2.服务端返回一个收到给客户端,
   -3.客户端又给服务端一个确定。
   这三步只是为了建立连接,跟应用层还没关系。
   最后一步实际上有两步黏连在了一起(如果仅是建立通信就这样了,如果是要发送数据实际上第二步结束应该是客户端发送给服务端数据包,然后服务端发送给客户端确定,但是现在被黏连为客户端对服务端发送的数据和确认在一个包里,省了回来的一步,所以总体还是三步)
   以上三步全部完成才会在服务端和客户端的传输控制各开辟一个空间(比如new 一个Thread)建立连接,new Thread抛出一个线程由应用层进行,没完成就不开辟,不连接。
  四次分手:
   -1.客户端对服务器请求分手,
   -2.服务端返回一个收到给客户端,(出于礼貌)
   此时分为两种情况,若两端都想分手:
   -3.服务端继续返回一个请求分手给客户端
   -4.客户端返回一个收到给服务端。(出于礼貌)
   然后两端销毁资源。
   三次握手->数据传输->四次分手->销毁连接。这个过程是成为一个最小粒度,不可被分割(就是没完成三次握手连接不上)
 1、应用层(会话和表示被融合进来):
  http协议(浏览器上网),ssh协议(访问虚拟机),ssmtp协议(发邮件)
  应用层是为了准备字符串的格式化
 2、传输控制层:
  传输控制层仅是为了准备各种包(握手包、确认包…),仅凭他是无法发送数据的
 3、网络层
  下一跳机制:每个互联网设备,不需要存储全部链路表的路径,只需要知道自己周边的(比如一个路由器下的所有局域网设备),他只需要知道自己怎么出去,发给下一个外面的设备,然后外面设备查询路由表,也仅知道自己的一步往哪,以此类推,一步一步的推向目的地。
  网络层总体:下一条机制、route -n、路由判定、按位与。(具体解释在下文的三、6、中)
 4、链路层
  网络层找到了下一跳地址后,链路层在外面包装一层地址写mac地址(网卡地址),链路层也有一张表(解释在下文三、7、中)
 5、物理层

  综述:传输控制层准备了各种包,并且写了一个端口号的地址,外面包着网络层写了网关的地址和目标网络地址,在外面一层包着链路层根据网络层找的网关地址映射在本地的哪一个网卡mac地址上出去,然后多个下一跳到想要连接的服务端入口网关,然后打开里面一层找到进了入口之后的局域网中的哪一个IP(机器),然后根据端口找到对应的程序,交给他。(每一个下一跳改变的只是mac地址,不断到每个硬件网卡中,里面的目标IP地址和端口不变,所以不会迷路)
  结论:TCP/IP协议,基于下一跳的机制,IP是两个端点间(从想发送请求的最开始的IP,到最后到达的终点,也就是无论怎么下一跳包内的IP地址是不会改变的),MAC地址是节点间的(每一跳之间的两个网卡的地址,也就是每一跳都会变)。

三、Linux

  1. netstat -natp命令查询各个端口都有什么进行了连接结果如下:
    在这里插入图片描述
      第一列代表tcp,第四列代表 本机的:端口,因为开的是node04标签所以当前IP是14,第五列是哪个IP的什么端口连接到了本机第四列的哪个端口,如图中192.168.150.1就是windows的IP,最后一列斜杠前为当前进程ID,斜杠后为解释,图中有个sshd的,ssh是远程连接,d代表后台服务

  2. 先建立一个连接口,tcp建立一个连接:
    在这里插入图片描述
      第一个命令中的$$代表当前的解释程序的id号,fd是文件描述符的意思,最后一个命令分割:8代表在上面那些文件描述符中创建一个为8的文件描述符,<>代表输入输出两个方向的,都指向后面的磁盘目录

  3. 再手动把GET / HTTP/1.0\n代表的意思发送到文件描述符8中再输出出去(由于此时8为baidu.com,就意味着给baidu.com发送一个连接)
    在这里插入图片描述
      最后一个命令中的8代表上面的文件描述符8,>代表输出出去的,&代表后面的8不是文件8,是文件描述符8,-e代表后面引号内的\n能被理解为换行,echo代表数据,引号内为http协议规定的request headers请求头的最小写法(在浏览器f12,network中的request headers中能看到类似的),GET代表是GET方式,/ 代表提供的资源,HTTP/1.0代表是http1.0的版本,换行符是必备的

  4. 连接baidu.com后返回的response header取得
    在这里插入图片描述
      cat读,0来自于8文件描述符,<代表输入,&意思代表8是文件描述符不是文件。读出来并打印
    在这里插入图片描述
    出现这个代表上面连接上baidu.com后下一步操作时间太长未操作了。

  5. 关闭文件描述符8:
    在这里插入图片描述
      8代表文件描述符,<输入,&代表8是文件描述符不是文件,后面还有个-

  6. 网络层内容解释
    在这里插入图片描述
      网卡信息文件,if代表interface,cfg为配置,eth是以太网的意思,0代表第一块网卡
    在这里插入图片描述
      IPADDR代表IP地址,NETMASK是掩码的意思,GATEWAY网关,DNS是远程服务器的地址,把你要去的地址给他,他给你返回个地址。
      IP是一个点分字节,每个点隔开一个字节,(每个字节8个二进制位,全0-全1表示的最小最大十进制的数的范围是0-255),所以IP最大是255.255.255.255。
      拿着IP地址和掩码会发生二进制的按位与运算,可以得出网络号(图中网络号最后为192.168.150.0)
    在这里插入图片描述
    &emsp; 上图这样可以打开路由表(第一个目标,第二个网关,第三个掩码,最后一个iface接口),可以看到第一行中目标网络显示的就是上上图中ip地址和掩码做按位与运算的结果,前两行的网关为0.0.0.0是因为当前网络跟150这个局域网中,所有这个局域网设备的连接不需要下一跳了,不用准备一个出去的网关,我们自己就可以连接,只有网和网之间才需要网关作为入口出口。
    在这里插入图片描述
      ping www.baidu.com打出后看到了time =这是数据包发出去到百度然后返回回来所用的时间,红框为百度的地址,如果我想到百度没人知道百度的地址,用红框的数字跟上面route -n出来的三行中的掩码依次做按位与运算(路由判定),只有最后一行的结果才跟目标地址一样(0跟谁与都是0),所以第三行有效,查询到了第三行的网关是192.168.150.2,知道了我的下一跳应该走192.168.150.2出去,这就是默认网关。

  7. 链路层内容解释
    在这里插入图片描述
      arp -a会显示链路表。
      局域网中的每个IP在哪个网卡地址(图中有冒号的那一块)

北京马士兵教育学习笔记整理

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值