网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
- 认识IP地址,端口号,TCP协议和UDP协议的区别,网络字节序等网络编程的基本概念
- 学习socket api的基本用法
- 能够实现一个简单的UDP网络程序
- 能够实现一个简单的TCP网络程序,并且优化:多进程版本和多线程版本
- TCP协议和UDP协议的区别
本节重点需要掌握的是:
基本概念
1. 认识IP地址
- IP地址是在IP协议中,用来标识网络中的不同主机的地址
- IP协议有两个版本,IPv4 和 IPv6 (默认指的是IPv4)
- 对于IPv4来说,ip地址是4字节,32位的整数
表示为点分十进制格式,4个组,一个组8个位(用十进制表示)用点分割的每一个数字表示一个字节,范围是0~255
eg:192.168.0.1- 对于IPv6来说,ip地址是128位的整数
表示方式:将128位分为8个组,一个组16位(写成4个十六进制数)
eg: 31da:1d3:0:2f3b:2aa:ff:fe28:9c5a
源IP地址和目标IP地址是基本不变的地址 下面用唐僧师徒四人西天取经的例子来解释一下:
整个取经的过程中:
- 源IP地址(长安)——>目标IP地址不变(西天),这整个过程中一个不变的地址
- 到了翠云山芭蕉洞,人家会问:你从哪到哪里去?这个时候有两个回答,两个地址:第一个:从长安来去西天取经,源IP地址(长安)——>目标IP地址不变(西天);第二个:上一站(火焰山)——>下一站(积雷山摩云洞),这是在这个过程中需要经过的路,每一站(路)都有自己的ip地址和MAC地址(物理地址)。
思考:是不是只需要有ip地址就可以通信?
同样的问题,整个西天取经过程中,直到ip地址(从长安到西天),只知道这个不能完成取经;需要直到从长安的谁那得到的信息到西天的谁那拿经(唐太宗——>如来佛);有了ip地址(长安 西天)和端口号(唐太宗 如来佛)才能完成取经。——>引出了下面的端口号的概念。
2… 认识端口号
- 端口号(port)是传输层协议中的内容
- IP地址+端口号就是套接字
- 套接字通信本质就是进程间通信(而其中所看到的公共资源就是:网络)
下面对端口号做以解释:
- 端口号:2字节16位的整数;
- 端口号用来标识进程的,告诉操作系统,当前的这个数据要交给哪一个进程来处理
- IP地址+端口号(套接字) 能够标识网络上的某一台主机的某一个进程
- 一个端口号只能一个进程占用(唯一性)
端口号port和进程id的区别:
- 都是标识进程的,pid是表示唯一进程的,端口号也是唯一表示一个进程的
- 进程id: 所有的进程都有id
- 端口号:只有网络通信时,进程才会有端口号
另外:
一个进程不可以绑定多个端口号(只是可以绑定任意的端口号,除了知名端口号(0-1023)外),
而一个端口号能被多个进程绑定(比如tcp程序的多进程版本和多线程版本)
其中源端口号和目的端口号就是上面例子中的唐太宗和如来佛
3. TCP协议和UDP协议的区别:
- TCP协议:传输控制协议
特点:
- 传输层协议
- 有连接
- 可靠传输
- 面向字节流
- UDP协议:用户数据报协议
特点:
- 传输层协议
- 无连接
- 不可靠传输(高效传输)
- 面向数据报
下面是我的另外一篇文章TCP协议和UDP协议的区别:
https://blog.csdn.net/qq_37941471/article/details/80888827
文章中详细的解释了每一个特点。
4. 网络字节序
首先我们回顾一下大端和小端:
- 大端和小端是按照什么来划分的?
答:字节。因为每一个地址单元对应一个字节。 - 地址:分为 高地址 低地址
- 数据:分为 高位 地位
- 大端模式:用高地址存放数据低位,用低地址存放数据高位
eg: 32位的数0X12345678在CPU内存中存放的方式(假设0X4000表示低地址):
内存地址 | 0X4000 | 0X4001 | 0X4002 | 0X4003 |
---|---|---|---|---|
存放的内容 | 0X12 | 0X34 | 0X56 | 0X78 |
- 小端模式:用高地址存放数据高位,用低地址存放数据低位
eg: 32位的数0X12345678在CPU内存中存放的方式(假设0X4000表示低地址):
内存地址 | 0X4000 | 0X4001 | 0X4002 | 0X4003 |
---|---|---|---|---|
存放的内容 | 0X78 | 0X56 | 0X34 | 0X12 |
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!