目录
四:网络定位(IP地址) 应用程序定位(端口号) 数据有效交互(通信协议)
一:基于流套接字的编程流程
二:了解客户端和服务器
现实生活中,客户端比如有QQ,微信等(客户机安装软件),QQ微信对应的服务器就是腾讯公司内部应用程序(为客户端服务,比如申请QQ账户微信账户又或是登录上QQ和微信)。客户端和服务器二者之间利用的就是一个网络的通道。
比如用户账户密码,QQ应用程序就是通过网络通道发送给腾讯公司。
如果直接客户端和客户端之间通信,是不安全。因此就需要引入服务器来进行监管。
就比如日常使用的聊天消息,中间就需要经过 服务器 来完成通信。(如果是直接两个客户机直接交互就有可能造成数据的不安全),虽然看起来从A到服务器再到B的这样一个过程很麻烦,但实际上服务器起着数据监管的作用,服务器会及时地对违规操作进行处理,保证数据的安全。同时服务器统一地对用户账户进行管理(比如QQ被盗号就可以找腾讯寻求帮助进而找回属于自己的账户,因为那些数据都是由腾讯公司数据库统一管理的)
服务器(伺服器)就是专门为客户端服务的 ,并且这个客户端是多个的。
三:了解网络编程 IP地址 局域网
作为一个软件开发公司,作为程序员,开发一款软件,就必须要带有客户端,服务器,利用网络达到数据交互,让客户端的业务变得更加丰富,让服务器能够更加稳定安全。如果用户使用一个应用程序(应用程序在运行起来的时候,操作系统识别为进程),服务器归根结底还是一台计算机,因此服务器应用程序也仍然属于进程,也就是说明客户端和服务器,实际意义上是进程之间的数据传递【进程间通信】,socket网络是跨计算机,利用网络实现的进程间通信,也是IPC技术的一种。
现阶段,网络编程已经变成了所有的应用程序开发的时候所必备的一项业务,现在的单机版应用程序都很少应用到。即便是单机版应用程序,在下载的时候仍热还要使用到网络,单机应用程序实际在后台也是应用到了网络的业务。
远程通信的基础
•通信双方•双方共同约定和遵循的协议
打个 取快递的 例子,如果想要取快递,就需要地址和名字。这个名字就类似于QQ的账号,地址就类似于网络定位。网络定位如果想要定位到一台计算机就使用到IP地址。
ipconfig可以查看到当前自己计算机的ip地址
比如上图 以太网 IPv4地址 连接到的是192.168.2.103,实际上这个IP地址已经经过了路由器的转化。
win10下,右键查看网络连接可以看到
如上图 以太网连接的是一个机房2的5G,右键以太网查看属性,可以看到IPv4
IPv4就是当前的ip地址 再点击上图属性可以看到
自动获取IP地址 (我们在平常使用的时候一般情况下都是自动获取IP地址)。
如果想要有使用自己的独立的IP也可以,可以申请独立IP地址但是价格也是非常高的。(IP地址实际上是不够用的)
IP地址不够用,才有路由器,交换机。在连接路由器的时候就会生成一个新的IP网段,这个网段我们称为局域网。IP地址 0 255 有四段 如果真的每个人都申请属于自己的IP地址有点浪费。因此这种由小的网络组建成新的局域网,不断地去拓展,形成一个大的网络。
举个例子,每个人(有属于自己的计算机)都可以通过网线 wifi连接网络,像这种连接就是使用一个路由器来进行连接的,在这块区域下使用这个路由器的网络,这个网络即局域网,这个局域网新建新的网络通道,重新生成一个新的网络地址IP。如果某块区域下所有计算机都想上网,就首先要路由器先能够上网。如果这个路由器不能上网,那这块区域的计算机是不能连接因特网的。因此只有路由器能够上网,由它所发送出来的信号,形成一个局域网,让区域下计算机能够上网。这个路由器接进来的信号就有一个IP地址(比如192.168.1.0可以上网),由它来生成一个新的网段【192.168.1.1 - 192.168.1.255 第4网段的差别】,对于其他的路由器(可能就有比如192.168.2.0 192.168.3.0是第3网段的差别),某块区域下的所有路由器(比如一家公司使用的多台路由器),那就由这家公司提供一个网络总线(一个ip地址),再接下来就是这座城市(一个ip地址),这个省份(一个ip地址),以此类推,就能够让很多人使用到网络了。
现在对自动获取IP地址就可以理解了,比如就你一个人使用一个固定的ip地址,那如果你不用的时候(闲置状态),其他人也不能用,全世界那么多人,因为某一个人而少了一个ip地址,显然是不好的。但是现在使用的是全部的人都是自动获取IP地址,就能够做到今天你开机上网使用了一个ip地址,但是等你下线之后,这个ip地址空闲出来,就能够给其他需要的人使用了。这样网络运营商的ip地址就不会那么紧张了。【网络定位:IP地址】
四:网络定位(IP地址) 应用程序定位(端口号) 数据有效交互(通信协议)
只有网络定位是不够的 ,比如你发送一个消息,你有qq 微信 微博等多个应用程序,那么你发送的这个消息该发到哪个呢。需要应用程序定位,同时运行多个聊天软件(多个进程),qq发出你好,就应该由qq(这个进程)来接收你好这个消息,其他聊天软件应用程序就不能接收。
那么怎么做到应用程序定位呢 就需要使用到端口号了。(可以把端口号 类似 现实生活中的 手机号码)
有ip地址,有端口号虽然可以保证数据能够传递到接收方,但是这个数据对方不一定能够读懂。
那么就需要使用到 数据有效交互:通信协议,通信双方约定好的一种数据的结构方式【通信双方按照结构发送 也按照结构接收】
【重点】基础网络实现的三要素:IP地址 端口号 通信协议
五:了解网络工程
类似TCP/IPv4 TCP是传输层 IP是网络层
如图 OSI参考模型网络七层协议 ,从上往下,越往上越靠近软件层,越往下越靠近硬件层。应用层中可能有逻辑 SQL数据库语句 文件操作,因此就有了表示层 会话层。比如SQL语句在会话层。到传输层开始就已经到硬件层面了,传输层是计算机当中的所有的数据线路。网络层是看是否有网卡 wifi 通信协议 TCP(传输层)/IP(网络层),物理层(是否有网卡 驱动)。从应用层端的UI界面,发送一条消息,打包一层一层往下发到物理层,发送出去。发送之后对方是先物理层收到数据之后,一层一层解开,解到应用层,界面中进行显示消息。
应用层 表示层 会话层都属于应用层,应用程序所看到的界面 逻辑 和 应用程序所设计到的文件,全部都属于应用层。 数据链路层 物理层都属于网络接口层。
HTTP 浏览网页使用的协议 HTTP协议是属于应用层的 但HTTP协议是搭建在 首先要有IP TCP前提下才会有HTTP,HTTP最早是代码实现的通信协议
SQL语句是会话层 是和数据库进程产生了一个连接
TCP和UDP是网络通用通信协议 ,可二选一 也可两个都有
IPV4就是现在所看到的 四个段 全部都是以数字呈现的 IP地址。IPV6是V4版本升级版,IPV4不够用所以升级成新的版本IPV6,但是目前民用基本没有IPV6,IPV6一般是国家标准(军事系统军用 安全部门才用IPV6,为了区分开国家和民用的网络通道),如果打游戏的人,知道STEAM的,那个评论区的服务器使用的是IPV6。
物理层就是硬件层面了,比如 电脑 RZ45水晶头 插入网线 就是物理层,又比如网卡 驱动设备 那类真实存在的就是物理层。物理层会识别,当前你是否具备有网络 网卡的驱动,有了驱动,你的电脑才可以适配,能适配才能收到网络信号。就比如装操作系统,一般都要安装驱动(比如 显卡驱动 鼠标驱动 键盘驱动 屏幕驱动 网络驱动),一台裸机,安装的时候必须将驱动安装到位,如果没有某些驱动 操作系统无法调用。
六:TCP/IP协议族
•TCP/IP 实际上是一个一起工作的通信家族,为网际数据通信提供通路。为讨论方便可将•TCP/IP 协议组大体上分为三部分:–1.Internet 协议(IP)–2.传输控制协议(TCP)和用户数据报文协议(UDP)–3.处于TCP 和UDP 之上的一组协议专门开发的应用程序。它们包括:TELNET,文件传送协议(FTP),域名服务(DNS)和简单的邮件传送程序(SMTP)等许多协议。
TCP UDP 网络通用协议
IPV4:数字 4段(不够用)
IPV6:26个英文字母 + 数字 (16位 32位都有可能)
IPV6的排列组合 比 IPV4 要多的多
对于TCP和UDP 区别:
TCP 要求 通信双方在建立连接的时候 要保证通信双方都在线。如果有一端不在线就不能连接。(QQ中的 客户端 和 服务器 双方在线TCP 服务器一般24小时在线 如果不在线一般会有公告通知维护阶段),TCP有数据安全性 但是效率要比UDP低。TCP的传输 每次的传输没有数据的上限(通过代码自己编写 想要传输多大都可以 但是要在你的硬件设备支持条件下才可以) ,因为TCP传输的方式是流式传输 没有传输上限。 【考虑数据传输的安全性首选TCP】
UDP 通信双方在连接的时候不需要去验证是否在线。每次传输64KB。因为UDP传输方式是 报文包式传输。【考虑数据传输的效率首选UDP】
搭建网络 二选一 或者 全选
使用火绒剑 可以查看到
QQ使用TCP,同时也使用了UDP (UDP一般隐藏在后端,因此我们少见),只要有TCP的都有远程地址 如14.18.180.113:443 冒号前IP地址 冒号后端口号 通过IP地址+端口号就可以找到一台计算机,进而找到计算机的应用程序。看不到UDP的远程地址,因为UDP的工作业务都处于是本地的,没连接远程某台电脑,UDP是做的本地操作。【UDP举个现实中例子 就比如 大学生上计算机课 在机房中 老师可以操控机房所有计算机老师可以往各个机房计算机中发送文件 无论这台计算机是否开机都不影响 UDP 大学机房公屏软件讲究效率】。开发应用程序 基本都是使用TCP协议
七:SOCKET分类
•流式套接字(SOCK_STREAM)//流式传输 TCP协议流式的套接字可以提供可靠的、面向连接的通讯流。它使用了TCP协议。TCP 保证了数据传输的正确性和顺序性。
•数据报套接字(SOCK_DGRAM)//UDP协议数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错。使用数据报协议UDP协议。
•原始套接字。原始套接字允许对低层协议如IP或ICMP直接访问,主要用于新的网络协议实现的测试等。
八:SOCKET函数
socket() bind() connect()
listen() accept() send()
recv() sendto() shutdown()
recvfrom() close() getsockopt()
setsockopt() getpeername()
getsockname() gethostbyname()
gethostbyaddr() getprotobyname()
fcntl()