目录
一.网络基础
1.认识 "协议"
2.协议分层
(1)软件分层
(2)协议分层
3.OSI七层模型
4.TCP/IP五层(或四层)模型
5.网络和操作系统之间的关系
6.数据包的封装(封包)和解包,分用
(1)下图为数据封装,解包的过程
(2)分用
7.局域网(以太网)通信的原理
(1)局城网中两台主机可以互相通信
(2)局域网通信原理
(3)MAC地址和IP地址
(4)数据包传输通过路由器转发
二.网络编程套接字
1.源IP地址和目的IP地址
2.端口号
3.理解 "端口号" 和 "进程ID"(端口号的意义)
一.网络基础
1.认识 "协议"
以寄快递为例:你和卖家沟通好,买一个鼠标,实际上快递员给你的是 一个包裹,里面有鼠标,
实际上多给了我一些东西,多了一张 快递单, 快递单是一块数据=>快递公司和快递点,快递小哥之间的协议。 为了维护协议,一定要在被传输的数据上,新增其他数据(协议数据)
举例:
HTTP协议是超文本传输协议;DNS协议为域名解析协议;FTP协议为文件传输协议;SMTP协议为电子邮件传输协议
2.协议分层
(1)软件分层
软件是可以分层的,为什么要分层?
1.软件在分层的同时,也把问题归类的
2.分层的本质:软件上解耦
3.便于工程师进行软件维护
网络本身的代码,就是层状结构!
(2)协议分层
层状结构下的网络协议,我们认为,同层协议 都可以认为自已在和对方直接通信,忽略底层细节
同层之间一定都要有自己的协议。
在下面这个例子中, 我们的协议只有两层(汉语协议和电话机协议); 但是实际的网络通信会更加复杂, 需要分更多的层次。分层最大的好处在于 "封装",面向对象例子。
3.OSI七层模型
4.TCP/IP五层(或四层)模型
5.网络和操作系统之间的关系
(1)体系结构直接决定, 数据包在主机内进行流动的时候,一定是要进行自顶向下(封包)或者自底向上(解包)进行流动的。以前的所有的IO都是这样的。
(2)tcp/ip协议和操作系统之间的关系是:操作系统内部,有一个模块,就叫做tcp/ip协议(传输层和网络层),网络协议栈是隶属于OS的。
(3)同层协议都认为自已在和对方直接通信——所以每一层都要有自己的协议
(4)重谈协议——计算机的视角,如何看待协议:① 体现在代码逻辑上 ② 体现在数据上
以寄快递为例:你和卖家沟通好,买一个鼠标,实际上快递员给你的是一个包裹,里面有鼠标,
实际上多给了我一些东西,多了一张快递单,快递单是一块数据=>快递公司和快递点,快递小哥之间的协议。为了维护协议,一定要在被传输的数据上,新增其他数据(协议数据)
6.数据包的封装(封包)和解包,分用
(1)下图为数据封装,解包的过程
(2)分用
有效载荷的分用过程:数据包添加报头的时候,也要考虑未来解包的时候,将自己的有效载荷交付给上层的哪一个协议!
下图为数据分用的过程:
两个结论:(大部分协议的公共属性)
1.一般而言,任何报头属性里面,一定要存在的一些字段支持,我们进行封装和解包,即:报头中一定要存着用于 区分报头和有效载荷 的数据
2.一般而言,任何报头属性里面,一定要存在的一些字段支持我们进行分用。即:报头中一定要存着用于 得知报文的有效载荷要给上层哪个协议 的数据
7.局域网(以太网)通信的原理
(1)局城网中两台主机可以互相通信
如果两台主机,处于同一个局城网。这两台主机可以直接通信——以太网,一种局域网的标准(以太——物理学界太空中不存在的物质叫以太,为了致敬命名以太网)以太网:站在系统的角度 就是 两台主机之间的临界资源。
(2)局域网通信原理
1.每一台主机都要有唯一的标识:该主机对应的MAC地址!
2.任何一台主机,在任何时刻,都可以随时发消息——碰撞域——无法准确的听到对应的消息——识别发生了碰撞(碰撞检测)——碰撞避免——等不碰撞了过一会儿再发消息
(3)MAC地址和IP地址
1.从哪里来<源IP>,到哪里去<目的IP>——IP地址:源IP,目的IP
2.上一站从哪里来<源mac地址>,下一站要去哪里<目标mac地址>(由“到哪里去”决定)——MAC地址: 源mac地址,目标mac地址
MAC地址:用来在局域网中,标定主机的唯一性。
IP地址:用来在广域网(公网),标定主机的唯一性。
示例:
路由器可看做一个主机同时横跨了两个局域网
所有的IP向上的协议,发送和接受主机看到的数据是一模一样的
网络 -> IP网络 屏蔽了底层网络的差异! ! !
数据“你好”从客户发出,不断封装,到以太网驱动程序完成最后封装,再通过以太网传输给路由器下的以太网驱动程序,路由器下的以太网驱动程序解包数据,传给路由器,路由器发现这个数据是要传给IPB的,再通过路由器下的以太网驱动程序封装,通过令牌环传输给目标主机所在网络,自底向上解包传输
(4)数据包传输通过路由器转发
网络传输数据的本质就是数据不断的封装和解包。路由器可看做一个主机同时横跨了两个局域网
所有的数据,必须在”网线”上跑!
二.网络编程套接字
1.源IP地址和目的IP地址
目的IP地址:通信主机目的主机
两主机可以在同一个局域网也可以不在。
2.端口号
我们在网络通信的时候,不止是让两台主机通信。实际上,在进行通信的时候,不仅仅要考虑两台主机间互相交互数据。本质上讲,进行数据交互的时候是用户和用户在进行交互。用户的身份,通常是用程序体现的。程序一定是在运行中——进程!
主机间在通信的本质是:在各自的主机上的两个进程在互相交互数据!
IP地址可以完成主机和主机的通信,而主机上各自的通信进程,才是发送和接受数据的一方
IP :确保主机的唯一性
端口号(port):确保该主机上某一个进程的唯一性(则一个进程只能占用一个端口号)
IP+PORT = 标识互联网中唯一的一个进程!——>socket
网络通信的本质:就是进程间通信! ! !
一个进程可以有多个端口号,但一个端口号不可以对应多个进程
3.理解 "端口号" 和 "进程ID"(端口号的意义)