网络编程:使用编程语言实现多台计算机的通信
网络三要素:Ip地址 端口 协议
IP地址和端口能够在广袤的互联网中定位到要通信的程序,协议和数据传输方式规定了如何传输数据,有了这些,两台计算机就可以通信了。
IP地址:网络中每一台计算机的唯一标识,通过IP地址找到指定的计算机
要通信时,计算机将IP地址封装到要发送的数据包中,交给路由器去处理,路由器会找到目标计算机,将数据包传递给它,完成一次单向通信
端口:用于标识进程的逻辑地址,通过端口找到指定进程
一台计算机可以同时提供多种网络服务,例如Web服务、FTP服务(文件传输服务)、SMTP服务(邮箱服务)等,仅有 IP 地址,计算机虽然可以正确接收到数据包,但是却不知道要将数据包交给哪个网络程序来处理。
为了区分不同的网络程序,计算机会为每个网络程序分配一个独一无二的端口号(Port Number)。
端口是一个虚拟的,逻辑上的概念。
一个进程可以申请很多端口,同时与多个计算机建立链接。
协议(Protocol):定义通信规则
协议就是不同网络设备进行网络通信的约定,通信的双方必须使用同一协议才能通信。协议是一种规范,由计算机组织制定,规定了很多细节,例如,如何建立连接,如何相互识别等。协议必须由计算机软件来实现。
高级网络协议如HTTP协议(用于浏览器)和SMTP协议(用于发送邮件)等建立在TCP协议之上,TCP协议建立在IP协议之上。
协议族(Protocol Family),是一组协议的统称。最常用的协议族:TCP/IP协议族,它包含了 TCP、IP、UDP、Telnet、FTP、SMTP 等上百个互为关联的协议,由于 TCP、IP 是两种常用的底层协议,所以把它们统称为 TCP/IP 协议族。
IPV4:一个32位整数,以字符串表示
IPV6:一个128位整数,是ipv4的升级版
数据传输方式
最常用的两种:SOCK_STREAM 和 SOCK_DGRAM
SOCK_STREAM (TCP编程) | SOCK_DGRAM (UDP编程) | |
---|---|---|
面向连接 | 无连接 | |
特性 | 数据可以准确无误地到达另一台计算机 如果丢失,可以重新发送 保证传输数据的完整性,但效率相对较慢 | 计算机只管传输数据,不管数据校验 数据丢失或损坏无法补救,但效率较高 |
有可能多种协议使用同一种数据传输方式,所以在 socket 编程中,需要同时指明数据传输方式和协议。
TCP协议:
OSI模型
Open System Interconnection 开放式系统互联
OSI模型的用途:进行数据封装
TCP报文格式
TCP Transmission Control Protocol 传输控制协议,一种面向连接的,可靠的,基于字节流的通信协议。传输前要建立连接,传输完毕后还要断开连接。
TCP报文格式:
符号 | 说明 |
---|---|
b 比特 | 比特位 最小单位 |
B 字节 | 1个字节占8个比特位 |
kB | 1kB = 1024 B |
MB | 1 MB = 1024 kB |
GB | 1 GB = 1024 MB |
建立连接时先传输三个数据包,俗称三次握手:
TCP/IP三次握手
三次握手的关键是要确认对方收到了自己的数据包,这个目标就是通过“确认号(Ack)”字段实现的。计算机会记录下自己发送的数据包序号 Seq,待收到对方的数据包后,检测“确认号(Ack)”字段,看Ack = Seq + 1
是否成立,如果成立说明对方正确收到了自己的数据包
TCP/IP四次挥手
建立连接非常重要,它是数据正确传输的前提;断开连接同样重要,它让计算机释放不再使用的资源,断开连接需要四次握手。
HTTP协议
Hyper Text Transfer Protocol 超文本传输协议
是一个属于应用层的面相对象的协议,适用于分布式超媒体信息系统
工作于Client-Server架构上。
HTTP协议特性
- 基于TCP/IP协议
- 基于请求-响应模式 一定是客户端先发起请求
- 无状态保存 stateless
- 无连接 每次连接只处理一个请求
HTTP的请求协议
浏览器发送数据到服务器需要遵守的请求协议
HTTP报文:用于协议交互
GET请求与POST请求
GET请求 | POST请求 |
---|---|
提交的数据会放在URL之后,以?分割URL和传输数据, 参数之间以&相连 | 提交的数据放在HTTP包的请求体中 |
提交的数据大小有限制(因为浏览器对URL的长度有限制) | 提交的数据大小没有限制 |
服务器发送数据到浏览器需要遵守的响应协议
响应状态码:1XX 正在处理 2XX 成功 3XX重定向 4XX 客户端错误 5XX服务器错误
200:请求成功
201:创建成功
301:永久重定向
302:暂时重定向
401:请求无权限
403:得到授权(与401错误相对),但是访问是被禁止
404:请求路径不存在
405:请求方法不存在
500:服务器异常
502:错误的网关,上游服务器响应无效
504:网关超时,上游服务器无响应
Socket:
同一个端口,被一个Socket绑定了以后,就不能被别的Socket绑定了
部分内容参考:
http://www.yuan316.com/
https://www.liaoxuefeng.com/