1.网络基础
网络分层:计算机网络分层模型有两种
- OSI参考模型
- TCP/IP参考模型
网络层:根据IP查找到目的地址的主机
运输层:通过端口把数据发送给目的主机,实现进程间通信
2.端口
端口规定有16位,及计算机有2的16次方65536个端口。
3.C/S架构
定义:即客户端/服务端,软件体系架构
作用:利用客户端和服务端的硬件资源,将任务合理的分配到客户端和服务端来实现,降低开销
Socket套接字就是这种软件架构,套接字客户端和套接字服务器
Socket的使用基于TCP和UDP协议
4.TCP协议
定义:TCP协议即传输控制协议,是一种传输层通信协议
特点:面向连接、可靠、全双工通信、面向字节流
- 面向连接:是指TCP传输数据时双方必须建立连接,传输完成时必须释放连接
- 可靠:是指,传输的数据无差错、不丢失、不重复、按顺序到达
- 全双工通信:是指只要建立连接成功后,在之后任何时候都可发送数据
- 面向字节流:流指的是流入进程或者从进程流出的字符序列。当TCP传输的数据过大时,TCP报文长度有限,所以或将其分割成几个数据块传输,但是因为有可靠性的保证,所以接收方会按顺序收到数据块然后将其组装成完整的数据。所以看起来像是TCP传输的是字节流一样。
5.TCP三次握手连接
TCP客户端和服务端连接需要经过三次握手才可以
- 第一次握手:客户端A向服务端B发送连接请求,将SYN的值置为1,同时随机产生seq的值x,然后客户端进入SYN_SEND状态
- 第二次握手:服务端B收到请求后,通过SYN=1知道客户端想连接,然后服务端B向客户端A发送确认连接,发送SYN=1,ACK=1,ack=x+1(第一次握手的seq值+1),seq=y(随机产生seq的值),然后服务端B进入到SYN_RCVD状态
- 第三次握手:客户端A收到服务端B发送的确认消息后,检验ACK是否为1,ack是否是第一次握手是发送的seq值+1,如果验证通过,则向服务端B发送确认信息ACK=1,ack=y+1,seq=x+1。然后客户端A进入ESTABLISHED状态。服务端收到后确认信息是否正确,如果正确进入ESTABLISHED状态。
完成三次握手后,接下来可以在任何时刻发送和接收数据
三次握手中的任何一次没有成功,都要重新发送
为什么要三次握手:
1.在连接时可能会出现这样的情况,客户端发送了连接请求,但是该信息在某个网络节点滞留时间过长,客户端已经连接超时释放了该连接后,该连接请求到达服务端后
2.该信息其实是一个过时失效的信息,所以当服务端收到信息后,以为客户端需要建立连接,于是服务端会向客户端发送确认信息。
3.如果没有采用三次握手,就会出现服务端认为是连接并且建立连接,等待客户端发送数据,但是客户端并没有要求建立连接,是不会向服务端发送数据的,所以服务端就会白白的等待客户端发送数据,这样就浪费了服务端的资源。
6.TCP释放连接
TCP释放连接时需要四次挥手过程(数据传输完成后,双方都可以释放连接)
- 第一次挥手:主机1向主机2发起释放连接请求FIN=1,seq=u,主机1进入FIN_WAIT-1状态
- 第二次挥手:主机2收到主机1的释放请求后,回复确认释放信息ACK=1,ack=u+1,seq=v,主机2进入CLOSE_WAIT状态
- 第三次挥手:然后主机2向主机1发送释放连接请求FIN=1,AC