OSI七层模型:
应用层:准备某种协议的数据,在发送前,通过内核完成和别人的连接
表示层
会话层
传输控制层
网络层
数据链路层
物理层
TCP/IP协议:
应用层:准备某种协议的数据,在发送前,通过内核完成和别人的连接
传输控制层:TCP(面向连接的、可靠的的传输协议)、UDP
网络层:数据包怎么走,,找到路由吓一跳,点:ip、route
ipv4(点分字节)
ipaddr:
netmask子网掩码: ip和netmask做&运算 得到网络号 ip的最后一位是主机号
route -n 显示kernel ip routing table
ping www.baidu.com 本地ip访问baidu经过了哪些路由
baidu的ip是220.181.38.149
如果destination匹配,看gateway,如果全是0就标识不需要吓一跳,直接通过网卡发出去就可以
arp -n arp是链路层的协议
arp -d 192.168.150.2 && curl www.baidu.com
tcpdump --n -i eth0 port 80 or arp抓包上面的
gateway网关:
数据链路层
物理层
面向连接的:双方经过三次握手后开辟资源后建立连接
可靠:确认机制
三次握手:
CS:SYN
SC:SYN + ACK
SC:ACK
三次握手后开始数据传输,关闭连接(四次分手)
TCP默认不是场链接,内核通过keepalive设置
当S挂掉后,c端的连接不会立即断开,因为C不知道S会挂掉,超时连接
四次分手:双方要销毁资源、断开连接
1.C fin
2.S fin+ack
3. S fin
4. C ack
测试四次分手 curl www.baidu.com:80,完成了三次握手+数据传输+四次分手
抓包:tcpdump -nn -i eth0 port 80
tcpdump -nn -X -i eth0 port 80
socket:
四元组:ip:port + ip:port 保证连接的唯一性
什么是端口号:
一台计算机只能分配65535个port,不是,可以修改的
C10K问题
负载均衡:
LVS四层 :不会和客户端建立三次握手
NIGINX七层:一个webserver,和客户端建立连接,经过三次握手
粘包拆包问题:
nc www.baidu.com 80 应用层的程序发起连接
GET / HTTP/1.0
nc localhost 6379
keys *
set k1 hello
keys *
*1 几个kv
$2 几个字节
k1
netstat -natp