1、计算机网络
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信链路(有线、无线)连接起来,在网络操作系统、网络管理软件和网络通信协议的管理与协调下,实现资源共享和信息传递的计算机系统。
2、网络编程3要素
(1)ip:确定唯一主机
(2)port:确定唯一进程(一个程序由多个进程qq.exe,每个进程的port不相同)
(3)网络协议
网络协议
应用层:
主要解决如何包装数据
HTTP:
(1)默认端口号:80
(2)基于请求响应模型,一次请求对应一次响应
(3)无状态的:每次请求之间相互独立,不能交互数据
传输层:
主要解决数据如何在网络中传输
TCP:Transmission Control Protocol 传输控制协议
(1)面向连接:三次握手
(2)保证数据的安全性
(3)下载文件
UDP:
(1)面向无连接性:即数据传输时,发送端不会确认接受端是否存在,就会发送;同样接受端收到数据也不会像发送端反馈。
(2)消耗资源小,通信效率高
(3)通常用于音频、视频通话
网络层:
将传输的数据进行分组后,发送到目标计算机
IP
数据链路层
定义物理传输通道
三次握手,四次挥手
1、三次握手:socket编程,客户端执行connect(),出发三次握手
(1)客户端发送连接请求,等待服务器端确认
(2)服务器端通知客户端收到了连接请求
(3)客户端再次发送确认信息,确认连接
两次握手的缺点:C第一次发送延误,然后C以为这个包丢了,在发送了一次收到了S的确认,建立了一次连接;之后延误的到了,服务器确认后,此次连接已经被C遗忘,造成资源浪费。
2、四次挥手:socket编程,任何一方执行close即产生挥手操作
(1)客户端发送FIN,表示客户端不再发送数据,但仍能接收数据
(2)服务器端收到FIN,回应ACK,因为服务器端可能还要发送数据
(3)服务器端发送完数据后,将FIN发送过去
(4)客户端发送ACK,确认关闭
遗留问题:(待解决)
tcp中,服务器端serverSocket.accept()只能收到客户端的一次write;如果要多次接受就要创建多个accept()