套接字编程预备知识
套接字
##1、套接字原理
1)网络编程套接字也是实现进程间通信的方式,我们知道进程间通信一般需要有一个条件就是两个进程需要看到同一份资源,然后进程1对这份资源进行写操作,进程2读这份资源就能知道进程1说了什么,基本上就实现了进程通信。但是不同的是,socket(套接字)不仅可以实现本机内不同进程间的通信,也可以实现网络中两台不同主机的通信。
2)我们知道网络中通信依赖的是网卡,那么我们就可以将socket抽象理解成网卡(Linux中一切皆文件),其实事实上套接字就是文件描述符(像0, 1,2 一样)往网卡中写再从网卡中读,就能实现数据传输。
3)套接字是由端口号和ip地址等信息构成的
##2、认识IP地址
由于UDP在IP协议的上一层,所以也实现了IP协议,我们就来认识一下IP地址,IP协议有两个版本(IPv4和IPv6,通常默认情况下是前者),ip地址用来标识网络中不同主机的地址;对于IPv4来说,ip地址是一个4字节,32位的整数
###ip地址的表示
通常使用“点分十进制”的字符串表示ip地址,例如192.168.128.116;用.分割的每一部分都是一个字节,范围0~255
##3、认识端口号
###端口号的结构
- 端口号是一个两字节16位的整数;
- 端口号要用来标识一个进程,告诉操作系统,当前数据交个哪个进程处理
- ip地址+端口号能够标识网络上的某一台主机的某一个进程
- 一个端口号只能被一个进程占用
###分辨端口号和进程ID
一个进程可以绑定多个端口号,但是一个端口号只能被一个进程绑定,所以端口号确定对应的进程也就确定了。
上述情况只是一般情况,特殊情况下,像父进程fork()后创建了子进程,那么子进程会拷贝父进程的代码和数据(包括文件描述符,所以也包含socket),这样的话就有两个进程绑定同一个端口号了。
##4、认识UDP协议和TCP协议
###1)UDP协议
UDP协议全称是用户数据报协议,和TCP一样用于处理数据包,但是它是一种无连接的协议,处于OSI模型中的传输层,其特点总结如下: