分层模型/OSI模型
路由器:连接两个不同网段的桥梁
网络应用程序设计模式
MTU:Maximum Transmission Unit,最大传输单元。某一层上面所能通过的最大数据包大小,以字节为单位。
以太网帧格式

ARP协议:通过对方的IP地址获取MAC地址
具体实现:每个主机都有ARP缓存,存有本局域网上的各IP和MAC映射,如果缓存里面没有找到,那么
1、主机A的ARP进程在本局域网进行广播,“我的IP地址是:xx.xx.xx.xx,MAC地址是:xx:xx:xx:xx:xx:xx,我想知道IP地址为yy.yy.yy.yy的MAC地址”;
2、本局域网的所有主机都会收到ARP请求;
3、如果主机B的IP地址与ARP请求的IP地址一致,就收下这个请求,并向主机A发送响应,同时将自己的MAC地址写入到响应中,其它主机的IP地址与请求的IP不一致,则不做处理;
4、主机A收到主机B的响应后,就将主机B的IP和MAC映射写到了自己的ARP缓存中;同时主机B将主机A的IP和MAC映射写到了自己的缓存中;
IP数据报格式

UDP数据报格式
面向无连接的,不安全的,不可靠的数据报传输(数据报不能分开)
传输效率高,比如收发短信

通过IP地址来确定网络环境中唯一的一台主机
主机上使用端口号来区分不同的应用程序, vim /etc/services查看已经绑定的端口号
IP+端口号唯一确定一台主机上的一个应用程序
TCP数据报文段格式
面向连接的,安全的,可靠的数据流传输协议
丢包重传、序号和确认序号、滑动窗口

三次握手和四次挥手

mss 表示告诉对方我这边一次最多接收可以接收多少数据
注意:
TCP状态图

TIME_WAIT出现在主动断开连接的一方。
socket_pair
客户端和服务端连接其实是一个连接对,创建socket相当于是创建了两个缓冲区:读缓冲区和写缓冲区。客户端的写缓冲区和服务端的读缓冲区是一对,客户端的读缓冲区和服务端的写缓冲区是一对。
半关闭状态
处于办关闭状态的时候,可以接受数据,但是不能发送数据,相当于把文件描述符的写缓冲区关闭了,半关闭一定是出现在主动关闭的一方。
滑动窗口
主要作用:进行流量控制
如果发送端发送的速度较快,接收端接收到数据后处理较慢,而接收端缓冲区的大小是固定的,就会导致缓冲区满而丢失数据。TCP协议通过“滑动窗口”机制解决这一问题。
在客户端给服务器发包的时候,不一定非要等到服务器返回响应包,由于客户端知道服务端的窗口大小,所以可以持续多次发送,当发送数据达到对方窗口大小了就不再发送,需要等对方进行处理,对方处理后就可以继续发送。
粘包
什么是粘包?
对方发送数据连续发了两次,然后读数据的时候第一次没有读完,剩余的数据在第二次读走了,这种情况就属于粘包。
解决方法:
心跳包
心跳包用于检查与对方网络的连接是否正常。
发送心跳过程:
服务A给B发送心跳数据(定义好的数据串),服务B收到心跳数据后,给A回复相应的数据,此时A收到B的回复后认为连接正常。假如A连续发了多次后,仍然没有收到B的回复,则认为连接异常,需要重建连接(先close原来的连接,再重新connect)。
长连接:连接建立好之后,一直保持连接不关闭
短连接:连接使用完之后就立刻关闭