现有网络通信架构
CS架构:由客户端和服务端软件组成,应用层协议可以自己来定义
BS架构:由浏览器当作客户端,以及服务端软件租组成,应用层协议需要遵循浏览器的应用层协议来定义
网络的介绍
网络通信依赖的物理介质+通信协议(相当于一个翻译官)
互联网通信协议的原理
互联网的通信基于OSI七层模型,从上至下分为,应用层、表示层、会话层、传输层、网络层、数据链路层、物理层(应表会传网输入)
一般我们也将其当作OSI五层模型
每一层都有相应的协议,协议的共同特点是由数据报文的头部+数据部分组成,数据部分是上层协议封装后传给下层的
应用层协议:http、telnet、dhcp
传输层协议:tcp(流协议)、udp
网络层协议:arp、icmp
数据链路层:ethernet
物理层:电信号
网络通信过程
两主机的通信(涉及到的协议-以太网协议、arp协议、ip协议)
- 前提是物理链路要通
- client应用层数据加上传输层的头部被传输层 协议封装成数据段;数据段加上网络层头部被网络层协议封装成数据包;
- 此时client会查找本机的路由表,找到下一跳和出接口,通过arp协议获取目标ip的mac地址
- client通过 以上获取的src-mac、dst-mac对上层数据包封装成数据帧
- 数据帧封装完成后交给对应的网卡发送给交换机进行转发(以上过程是一个封装的过程)
- 因为是局域网,交换机会找到对应的mac地址,并将数据包转发给对应的端口。
- 之后经过的网络设备都会查看数据帧中dst-mac是不是自己的或者广播包,如果是自己的则将数据帧解封装成数据包给上层协议处理。网络层查看dst-ip是否是自己的来决定是否继续进行解封装,如果不是自己的查看网络设备的路由表进行路由转发。(中间这些经过网络设备的传输过程改变的只有dst-mac,其他报文头部没有变化)
- server端收到了数据帧后进行数据的解封装。
tcp流协议(三次握手、四次分手,11种状态)
服务端状态
三次握手(一般是客户端发起)
- Listen: 服务端的初始状态
- SYN_RECV: 服务端接收到syn_send并发送syn建立连接的请求,状态会从listen转变为syn_recv
- ESTABLISHED: 服务端客户端的ack响应报文后,状态变为established
四次挥手(一般是服务端发起)
4. FIN_WAIT1: 服务端主动发起fin断开连接后,服务端的状态变为fin_wait1
5. FIN_WAIT2: 服务端收到客户端的fin和ack响应时,状态变为fin_wait2
6. TIME_WAIT: 服务端收到客户发来的fin报文请求并返回ack,状态变为time_wait,2MSL周期变为closed
7. CLOSED:
客户端状态
三次握手
- SYN_SEND: 客户端发送连接请求后的状态
- ESTABLISHED: 客户端收到服务端的ack和syn请求后,并发送ack的响应后,状态变为established
四次挥手
3. CLOSE_WAIT: 客户端收到服务端的fin请求后,如果没有要传输的数据则发送fin和ack响应,状态变为close_wait
4. LAST_ACK: 客户端主动发起fin断开连接请求,状态变为last_ack
5. CLOSED: 收到服务端的ack报文后,状态变为closed
常见问题
- 为什么tcp连接时三次握手,四次分手
- time_wait的意义
- 服务器上出现很多的syn_revc或者time_wait代表什么?
udp协议
udp没有重传和确认机制
socket介绍
socket又名套接字,为方便应用程序的开发,每种语言都有自己对应的套接字模块,socket代表了包括传输层以下的包的封装和解封装。
也就是说应用层程序只需要调用socket接口就能完成数据包的封装和解封装