cs note
  • 首页
  • 广告业务
    • RTA
  • 操作系统
    • 1.计算机系统漫游
    • 2.硬件结构
    • 3.内存管理
    • 4.进程管理
    • 5.文件系统
    • 6.设备管理
    • 7.网络系统
  • 网络
    • 高并发短链接
    • 网络编程
    • 网络通信
    • 网络协议详解
    • 网络与io模型
    • 网络io
    • 握手分手问题
    • 压测到网络IO
    • nio
    • osi七层参考模型
    • select,poole,poll详解
    • websocket
  • mysql
    • 一、基础
      • 1.1执行过程
      • 1.2存储过程
    • 二、索引
      • mysql索引
      • mysql索引优化1
      • mysql索引优化2
      • mysql索引优化3
    • 三、事务
    • 四、锁
      • 4.1锁详解
    • 五、日志
  • redis
    • 一、常见数据结构
      • 1.1数据类型
      • 1.2特殊数据类型
    • 二、线程模型 *
    • 三、持久化
      • 3.2主从同步
    • 四、锁
      • 4.1实现锁
    • 五、淘汰策略 *
    • 六、缓存
      • 6.1缓存一致性问题
      • 6.2缓存策略
  • kafka
    • 消息幂等通用方案
    • kafka基础使用
    • kafka集群搭建
    • kafka问题精选
    • mq常见问题
    • mq常见问题及解决方案
    • rabbitmq
  • 算法
    • 每日一题202312
    • 每日一题202401
    • 每日一题202402
    • 每日一题202403
    • LeetCode热题
由 GitBook 提供支持
在本页
  • tcp/ip协议各层简介
  • tcp模型
  1. 网络

网络通信

最后更新于1年前

tcp/ip协议各层简介

应用层:格式化字符串 传输控制层:处理包 3次握手 4次分手 源端口号->目标端口号 网络层:网络号 主机号 下一跳 (成本低且传输可靠) 源IP地址->目标IP地址 数据链路层:mac地址 下一跳的mac地址 源MAC地址->目标MAC地址

exec 22<> /dev/tcp/www.baidu.com/80     #linux中一切皆文件 22为管道 <>进出
echo -e "GET / HTTP/1.1\n" >& 22   #发送命令到22管道
cat <& 22  # 打印22管道收到的响应

exec 创建一个socket通信(内核内部完成) echo 用户空间 程序员 人 实现应用层协议

lsof命令lsof(list open files)是一个列出当前系统打开文件的工具

tcp模型

应用层 -> 传输控制层 -> 网络层 -> 传输链路层 -> 物理层

1. 传输控制层

netstat -natp
  • socket套接字 ip+prot : ip+port

  • udp 无连接 且 不可靠

  • tcp 面向连接的 可靠的传输

连接 ---> 三次握手 双方开辟资源为对方服务(内核)

3次握手

确认机制ack

socket 数据传输

套接字 唯一表示

ip+prot : ip+port

port 限制 65535个

4次分手

抓包

curl www.baidu.com  #一个完整的网络生命周期

ping www.baidu.com


tcpdump -nn -i eth0 port 80 | grep  180.101.49.11

建立连接


20:17:47.431427 IP 172.16.13.190.54444 > 180.101.49.11.80: Flags [S], seq 3907241968, win 29200, options [mss 1460,sackOK,TS val 15378414 ecr 0,nop,wscale 6], length 0
20:17:47.442390 IP 180.101.49.11.80 > 172.16.13.190.54444: Flags [S.], seq 2051857229, ack 3907241969, win 8192, options [mss 1452,sackOK,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,wscale 5], length 0
20:17:47.442398 IP 172.16.13.190.54444 > 180.101.49.11.80: Flags [.], ack 1, win 457, length 0

发送数据



20:17:47.442438 IP 172.16.13.190.54444 > 180.101.49.11.80: Flags [P.], seq 1:78, ack 1, win 457, length 77: HTTP: GET / HTTP/1.1
20:17:47.453663 IP 180.101.49.11.80 > 172.16.13.190.54444: Flags [.], ack 78, win 908, length 0
20:17:47.455084 IP 180.101.49.11.80 > 172.16.13.190.54444: Flags [P.], seq 1:1441, ack 78, win 908, length 1440: HTTP: HTTP/1.1 200 OK
20:17:47.455088 IP 172.16.13.190.54444 > 180.101.49.11.80: Flags [.], ack 1441, win 502, length 0
20:17:47.455091 IP 180.101.49.11.80 > 172.16.13.190.54444: Flags [P.], seq 1441:2782, ack 78, win 908, length 1341: HTTP
20:17:47.455094 IP 172.16.13.190.54444 > 180.101.49.11.80: Flags [.], ack 2782, win 547, length 0

断开连接


20:17:47.455172 IP 172.16.13.190.54444 > 180.101.49.11.80: Flags [F.], seq 78, ack 2782, win 547, length 0
20:17:47.464421 IP 180.101.49.11.80 > 172.16.13.190.54444: Flags [P.], seq 1441:2782, ack 78, win 908, length 1341: HTTP
20:17:47.464426 IP 172.16.13.190.54444 > 180.101.49.11.80: Flags [.], ack 2782, win 547, options [nop,nop,sack 1 {1441:2782}], length 0
20:17:47.466294 IP 180.101.49.11.80 > 172.16.13.190.54444: Flags [.], ack 79, win 908, length 0
20:17:47.466438 IP 180.101.49.11.80 > 172.16.13.190.54444: Flags [F.], seq 2782, ack 79, win 908, length 0
20:17:47.466444 IP 172.16.13.190.54444 > 180.101.49.11.80: Flags [.], ack 2783, win 547, length 0
20:17:50.484533 IP 180.101.49.11.80 > 172.16.13.190.54444: Flags [R], seq 2051860012, win 0, length 0

tcpdump抓包命令

tcpdump -nn -i eth0 port 80

2. 网络层

ip 172.16.13.190 子网掩码 255.255.240.0

240 11110000 网络号为前20位,主机号为后12位,一共可以有0-4095个主机。

按位与运算,得到网络号 172.16.0.0。主机号为13.190。

路由表

route -n

基于下一跳机制寻址

180.101.49.11 与 路由表中子网掩码 255.255.0.0 按位与得到 180.101.0.0 与 169.254.0.0不一致,不走这一条(下一跳)

172.16.15.253 默认网关

3. 传输链路层

arp表 (mac地址)

arp学习 交换机

源mac地址 目标mac地址全f 交换机会广播

linux命令-lsof