入门书籍:图解服务器端网络架构.pdf
一、TCP/IP协议栈中的各层的作用
1.物理层:解决的是传输0和1的问题
2.链路层:解决的是数据从源地址到目的地址传输的问题,通过MAC地址在自己的局域网内,以及通过L2交换机维护MAC地址和网口的映射表,来确保子网的数据有序的传输。
问题:既然局域网是用MAC地址就可以通信,为什么还需要IP地址? 局域网用MAC通讯为什么还要IP?
可以这么理解,只用MAC地址是完全可以在局域网通信,但一般的电脑设备没有提供只使用MAC地址来传输数据的“口子”,电脑最终还是要连接互联网的,要连外网必须使用IP地址,索性使用应用层一层一层向下调用,给用户留出统一的接口。
3.网络层:通过IP地址解决的是跨子网之间的数据传输,L3交换机维护路由表。
4.传输层:TCP和UDP协议,端口区别进程。
5.应用层:http ftp
二、七层/四层协议
2.IP包
3.TCP/UDP包
4.TCP的建立与断开(三次握手与四次挥手)
5.TCP状态机
6.keepalive机制
Linux下通过下面参数设置keepalive参数:
cat /proc/sys/net/ipv4/tcp_keepalive_time
cat /proc/sys/net/ipv4/tcp_keepalive_intvl
cat /proc/sys/net/ipv4/tcp_keepalive_probes
默认该功能没有开启,需要做一下修改/etc/sysctl.conf
net.ipv4.tcp_keepalive_time=7200
net.ipv4.tcp_keepalive_intvl=75
net.ipv4.tcp_keepalive_probes=9
sysctl -p 使其生效,sysctl -a | grep keepalive 命令来查看。
然后通过setsockopt设置tcp的keepalive.
#include <sys/socket.h>
int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len);