一文入门网络编程:常见协议、通信过程、Socket、CS/BS、TCP/UDP

网络编程三要素:ip地址、端口、协议,在网络通信协议下,不同计算机上运行的程序,可以进行数据传输

常见协议:

  • 传输层 常见协议有TCP/UDP协议。
  • 应用层 常见的协议有HTTP协议,FTP协议。
  • 网络层 常见协议有IP协议、ICMP协议、IGMP协议。
  • 网络接口层 常见协议有ARP协议、RARP协议。
  • TCP传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
  • UDP用户数据报协议(User Datagram Protocol)是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
  • HTTP超文本传输协议(Hyper Text Transfer Protocol)是互联网上应用最为广泛的一种网络协议。
  • FTP文件传输协议(File Transfer Protocol)
  • IP协议是因特网互联协议(Internet Protocol)
  • ICMP协议是Internet控制报文协议(Internet Control Message Protocol)它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
  • IGMP协议是 Internet 组管理协议(Internet Group Management Protocol),是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间。
  • ARP协议是正向地址解析协议(Address Resolution Protocol),通过已知的IP,寻找对应主机的MAC地址。
  • RARP是反向地址转换协议,通过MAC地址确定IP地址。

IP地址:

  • 要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而IP地址就是这个标识号,也就是设备唯一的标识

IP地址分为两大类:

IPv4

是给每个连接在网络上的主机分配一个32bit地址。按照TCP/IP规定,IP地址用二进制来表示,每个IP地址长32bit,也就是4个字节。例如一个采用二进制形式的IP地址是“11000000 10101000 00000001 01000010”,这么长的地址,处理起来也太费劲了。为了方便使用,IP地址经常被写成十进制的形式,中间使用符号“.”分隔不同的字节。于是,上面的IP地址可以表示为“192.168.1.66”。IP地址的这种表示法叫做“点分十进制表示法”,这显然比1和0容易记忆得多

IPv6

由于互联网的蓬勃发展,IP地址的需求量愈来愈大,但是网络地址资源有限,使得IP的分配越发紧张。为了扩大地址空间,通过IPv6重新定义地址空间,采用128位地址长度,每16个字节一组,分成8组十六进制数,这样就解决了网络地址资源数量不够的问题

冒分十六进制表示法:

如果计算出的16进制表示形式中间有多个连续的0,可以用两个冒号省略,计算机会识别出并自动补全省略的0
例如:FF01:0:0:0:0:0:0:1101可以压缩为FF01::1101

DOS常用命令:

  • ipconfig:查看本机IP地址

  • ping IP地址:检查网络是否连通

  • 特殊IP地址:

    • 127.0.0.1:是回送地址,可以代表本机地址,一般用来测试使用

端口:

端口

网络的通信,本质上是两个应用程序的通信。每台计算机都有很多的应用程序,那么在网络通信时,如何区分这些应用程序呢?如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的应用程序了。也就是应用程序的标识

端口号

  • 用两个字节表示的整数,它的取值范围是0 ~ 65535。其中,0 ~ 1023之间的端口号用于一些知名的网络服务和应用,普通的应用程序需要使用1024以上的端口号。
  • 一个端口号只能被一个程序使用,如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败

协议:

通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。常见的协议有UDP协议和TCP协议

TCP:

TCP协议是比较安全的通信协议,输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”,断开连接的时候需要四次挥手

特点:

1.需要建立连接
2.不会丢失数据、有序、安全
3.速度慢
4.建立连接后以流的形式传输,没有大小限制

UDP:

UDP是无连接通信协议,在数据传输时,数据的发送端和接收端不建立逻辑连接。
简单来说,当一台 计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。 由于使用UDP协议消耗系统资源小,通信效率高,所以通常都会用于音频、视频、视频会议和普通数据的传输采用UDP协议,即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议
UDP底层不会做校验,数据丢了就丢了,但是可以在应用层做校验,这样就可以弥补安全方面的问题,也就是前期需要把校验的架子做好,后面就会很方便。比如QQ就是用的UDP,不可能说消息丢了就丢了,都是上层做的校验的,但是对于中小型公司来说还不如直接用TCP来的实在,毕竟麻烦,TCP虽然建立连接的时候会慢一点,但是对于很多场景基本上是可以忽略不计的,并且TCP是很规范化的。

特点:

1.不需要建立连接
2.可能会丢失数据、无序、不稳定、安全低
3.速度块
4.每个包最大64kb

UDP与TCP的使用场景

TCPUDP
面向连接面向无连接
要求系统资源较多要求系统资源较少
TCP程序结构较复杂UDP程序结构较简单
使用流式使用数据包式
保证数据准确性不保证数据准确性
保证数据顺序不保证数据顺序
通讯速度较慢通讯速度较快

TCP应用场景:

对数据传输安全性要求高,比如文件传输

UDP应用场景:

对数据实时传输要求比较高,比如视频、通话、游戏

网络分层架构(分层模型):

为了减少协议设计的复杂性,大多数网络模型均采用分层的方式来组织。每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。每一层利用下一层提供的服务来为上一层提供服务,本层服务的实现细节对上层屏蔽。

在这里插入图片描述

业内普遍的分层方式有两种。OSI七层模型 和TCP/IP四层模型。可以通过背诵两个口诀来快速记忆:

  • OSI七层模型:物、数、网、传、会、表、应
  • TCP/IP四层模型:链、网、传、应
  1. 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
  2. 数据链路层:定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。如:串口通信中使用到的115200、8、N、1。链路层可以通过IP获取Mac地址
  3. 网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。网路层可以获取到目标IP
  4. 传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。
    主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
  5. 会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。获取端口号,标识进程
  6. 表示层:可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。
  7. 应用层:是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。对数据进行封装和解封装,没有进行封装(应用层->传输层->网络层->链路层)的数据是无法在网络进行传输的

网络的每一层,都定义了很多协议。这些协议的总称,叫“TCP/IP协议”。TCP/IP协议是一个大家族,不仅仅只有TCP和IP协议,它还包括其它的协议,如下图:

在这里插入图片描述

链路层:

以太网规定,连入网络的所有设备,都必须具有“网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。通过网卡能够使不同的计算机之间连接,从而完成数据通信等功能。网卡的地址——MAC 地址,就是数据包的物理发送地址和物理接收地址。
ARP协议:借助Ip地址获取Mac地址

网络层:

  • 网络层的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做“网络地址”,这是我们平时所说的IP地址。这个IP地址好比我们的手机号码,通过手机号码可以得到用户所在的归属地。
  • 网络地址帮助我们确定计算机所在的子网络,MAC 地址则将数据包送到该子网络中的目标网卡。网络层协议包含的主要信息是源IP和目的IP。
    于是,“网络层”出现以后,每台计算机有了两种地址,一种是 MAC 地址,另一种是网络地址。两种地址之间没有任何联系,MAC 地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。
  • 网络地址帮助我们确定计算机所在的子网络,MAC 地址则将数据包送到该子网络中的目标网卡。因此,从逻辑上可以推断,必定是先处理网络地址,然后再处理 MAC 地址。

传输层:

当我们一边聊QQ,一边聊微信,当一个数据包从互联网上发来的时候,我们怎么知道,它是来自QQ的内容,还是来自微信的内容?
也就是说,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做端口 port,它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。

端口特点:

  • 对于同一个端口,在不同系统中对应着不同的进程
  • 对于同一个系统,一个端口只能被一个进程拥有

应用层:

应用程序收到“传输层”的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。“应用层”的作用,就是规定应用程序的数据格式。

协议功能:
在这里插入图片描述

通信过程:

两台计算机通过TCP/IP协议通讯的过程如下所示:

在这里插入图片描述
将Hello发送到一台计算机的执行过程

封装过程是自上向下的:

  1. 应用层:因为数据是在应用程序产生的,所以要先封装数据
  2. 传输层:在主机上标识一个进程
  3. 网络层:包含源ip,可以获取目标ip
  4. 链路层:本身是有源Mac的,可以获取到接收Mac地址,有了Mac地址就知道往哪里发送了

接收端的解封装是反向执行的

Socket:

  • Socket,是插座、插孔的意思,一般称之为套接字用于描述IP地址和端口,可以实现不同程序间的数据通信。
  • Socket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用:Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
  • Socket底层是封装了两个单向的channel,进行网络通信时Socket都是成对出现的。
    在这里插入图片描述
  • 在TCP/IP协议中,IP地址+TCP/UDP端口号唯一标识网络通讯中的一个进程。IP地址+端口号就对应一个socket。欲建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接。因此可以用Socket来描述网络连接的一对一关系。
  • 常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。

网络应用程序设计模式C/S和B/S:

C/S模式

传统的网络应用设计模式,客户端(client)/服务器(server)模式。需要在通讯两端各自部署客户机和服务器来完成数据通信。

B/S模式

浏览器(Browser)/服务器(Server)模式。只需在一端部署服务器,而另外一端使用每台PC都默认配置的浏览器即可完成数据的传输。

C/S优点:

客户端位于目标主机上可以保证性能,将数据缓存至客户端本地,从而提高数据传输效率。一般来说客户端和服务器程序由一个开发团队创作,所以他们之间所采用的协议相对灵活。可以在标准协议的基础上根据需求裁剪及定制。例如,腾讯所采用的通信协议,即为ftp协议的修改剪裁版。因此,传统的网络应用程序及较大型的网络应用程序都首选C/S模式进行开发。如,知名的网络游戏魔兽世界。3D画面,数据量庞大,使用C/S模式可以提前在本地进行大量数据的缓存处理,从而提高观感。

C/S缺点:

由于客户端和服务器都需要有一个开发团队来完成开发。工作量将成倍提升,开发周期较长。从用户角度出发,需要将客户端安插至用户主机上,对用户主机的安全性构成威胁。这也是很多用户不愿使用C/S模式应用程序的重要原因。

B/S优点:

由于它没有独立的客户端,使用标准浏览器作为客户端,工作开发量较小。只需开发服务器端即可。另外由于其采用浏览器显示数据,因此移植性非常好,不受平台限制。如早期的偷菜游戏,在各个平台上都可以完美运行。

B/S缺点:

由于使用第三方浏览器,因此网络应用支持受限。另外,没有客户端放到对方主机上,缓存数据不尽如人意,从而传输数据量受到限制。应用的观感大打折扣。而且必须与浏览器一样,采用标准http协议进行通信,协议选择不灵活。因此在开发过程中,模式的选择由上述各自的特点决定。根据实际需求选择应用程序设计模式。

TCP的C/S架构:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572084.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux笔记(000) 】-- 系统启动过程

索引: 目录索引 一. 启动流程 BIOS --> MBR(Boot Code) --> 引导程序(GRUB) --> 加载内核 --> 执行Init --> runlevel 二. 内容详解 BIOS: Basic Input Output System , 基本输入输出系统 ,负责检查硬件,查找启动设备, 可启动设备在BIOS中定义。…

Golang——TCP、UDP实现并发(服务端与客户端)

Server端常用函数、接口: Listen函数:func Listen(network, address string) (Listener, error)network:选用的协议:TCP、UDP, 如:“tcp”或 “udp”address:IP地址端口号, 如:…

java中 将字符串时间 '2015-9-8 17:05:06' 转化为格式 '2015-09-08 17:05:06'

/** * 将字符串时间2015-9-8 17:05:06转化为格式2015-09-08 17:05:06 */import java.text.SimpleDateFormat; public class TestDate{ public static void main(String[] args) throws Exception{ String time "2015-9-8 17:05:06";//注意:时分秒必须都…

详解TCP协议三次握手四次挥手

三次握手: 三次握手表示建立通信阶段,在TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠,由于这种面向连接的特性, TCP协议可以保证传输数据的安全,…

Golang——实现文件传输

借助TCP完成文件的传输,基本思路如下: 发送方(客户端)向服务端发送文件名,服务端保存该文件名。接收方(服务端)向客户端返回一个消息ok,确认文件名保存成功。发送方(客户…

Golang——HTTP编程请求和响应实现

请求: HTTP 请求报文由请求行、请求头部、空行、请求包体4个部分组成,如下图所示: 请求行: 请求行由方法字段、URL 字段 和HTTP 协议版本字段 3个部分组成,他们之间使用空格隔开。常用的 HTTP 请求方法有 GET、POST。…

zabbix v3.0安装部署【转】

关于zabbix及相关服务软件版本: Linux:oracle linux 6.5 nginx:1.9.15 MySQL:5.5.49 PHP:5.5.35 一、安装nginx: 安装依赖包: yum -y install gcc gcc-c autoconf automake zlib zlib-devel ope…

WeChatTweak-微信小助手安装教程

github下载:https://github.com/Sunnyyoung/WeChatTweak-macOS CSDN下载:https://download.csdn.net/download/weixin_45477086/83895866 双击解压下载的WeChatTweak-macOS-***.zip在终端输入cd ,并敲一个空格,然后把解压的文件夹拖到终端 …

nodejs开发工具

我选择的是Hbuilder作为node项目的开发工具。先在Hbuilder 里面安装nodeEclipse插件,然后重启工具。点击添加项目,选择其他选项,出现下图选项,然后选择圈住的选项点击下一步:3. 如果不使用缺省位置,那么你的路径一定要…

排序之外部排序

有时,待排序的文件很大,计算机内存不能容纳整个文件,这时候对文件就不能使用内部排序了(这里做一下说明,其实所有的排序都是在内存中做的,这里说的内部排序是指待排序的内容在内存中就可以完成,…

Golang——Json的序列化和反序列化

JSON: JSON(JavaScript Object Notation):是一种轻量级的数据交换格式。 它是基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写…

安装配置 flannel - 每天5分钟玩转 Docker 容器技术(59)

上一节我们部署了 etcd,本节安装和配置 flannel。 build flannel flannel 没有现成的执行文件可用,必须自己 build,最可靠的方法是在 Docker 容器中 build。不过用于做 build 的 docker 镜像托管在 gcr.io,国内可能无法直接访问&a…

人人都是产品经理?

产品经理顾名思义就是产品经理。那么只要搞懂产品是什么、经理又什么什么,就明白了产品经理是什么。 产品是什么: 产品是满足需求的载体,能被市场、人们使用和消费,并能满足人们某种需求(创造价值)的任何东…

搭建一个简单的FTP服务器

本文介绍通过win7自带的IIS来搭建一个只能实现基本功能的FTP服务器,第一次装好WIN7后我愣是没整出来,后来查了一下网上资料经过试验后搭建成功,其实原理和步骤与windows前期的版本差不多,主要是对新的操作系统还不是很熟悉。相信用…

3D文档(BRD、MRD、PRD)怎么写

3D文档: 一般来说,BRD作为战略方向的制定,是最早产出的文档,而MRD则是在战略方向的基础上对市场进行的分析,同时对后续工作的方向进行一些说明和指导,也可以说是通过对市场环境、竞品的分析,明确…

需求收集、分析、管理的方法

需求: 什么是需求 百度百科给的解释:指人们在某一特定的时期内在各种可能的价格下愿意并且能够购买某个具体商品的需要。所以要想明白需求,还要明白另外两个概念,需要和欲望,因为从需要到需求是一个由宏观到微观的过程…

if函数 字体自动标红_发喜糖!REPT函数和图表订婚了~~

小伙伴们早上好呀!今天为大家分享的是REPT函数的应用实例。案例1:基础用法左右:按照给定的次数重复显示文本用法:REPT(文本,重复次数)搭配:Wingdings字体家族的应用案例2:条形图⑴ 单元格D3输入…

用户体验五要素

用户体验: 用户在使用产品过程中建立起来的一种纯主观感受。 用户体验的重要性: 会失去客户:如果你没有良好的体验,用户不会使用你的产品,而且产品很难有二次机会接触用户。会增加获客成本:获客成本越来越高…

trackingmore快递查询平台_国际快递物流信息追踪查询

以下是快递公司常用查询物流信息追踪平台1. 17TRACK查询网址:www.17track.net/zh-cn (强烈推荐,国际件都能查询)2. EMS查询网址:www.ems.com.cn 客服电话:11833. DHL网址查询:www.cn.dhl.com …

竞品分析该怎么做

竞品分析: 作用: 知己知彼,百战不殆。为自身产品设计提供功能、可用性、关键技术等方面的参考。提高自身产品的差异化程度。为新立项的产品、拍脑袋想出来的,降低风险。 如何选择竞品: 行业内领先的产品,通…