文章目录

  • 一、网络通信概述
    • 1.1、什么是网络
    • 1.2、使用网络的目的
  • 二、TCP/IP简介
    • 2.1、什么是协议
    • 2.2、计算机网络沟通
  • 三、端口和端口号
    • 3.1、什么是端口
    • 3.2、端口号
    • 3.3、端口分配
      • 3.3.1、知名端口(WellKnownPorts)
      • 3.3.2、动态端口(DynamicPorts)
    • 3.4、端口作用
  • 四、ip地址
    • 4.1、什么是ip地址
    • 4.2、ip地址的作用
    • 4.3、ip地址的分类
      • 4.3.1、A类IP地址
      • 4.3.2、B类IP地址
      • 4.3.3、C类IP地址
      • 4.3.4、D类地址用于多点广播
      • 4.3.5、E类IP地址
      • 4.3.6、私有ip
      • 4.3.7、注意
    • 4.4、子网掩码
  • 五、TCP和UDP
    • 5.1、TCP(传输控制协议)
      • 5.1.1、TCP三次握手过程
      • 5.1.2、TCP四次挥手
    • 5.2、UDP(用户数据报协议)
    • 5.3、TCP协议与UDP协议的区别
  • 六、socket简介
    • 6.1、什么是socket
    • 6.2、创建socket
    • 6.3、小案例:客户端和服务端通信

一、网络通信概述

1.1、什么是网络

网络就是一种辅助双方或者多方能够连接在一起的工具,如果没有网络可想,单机的世界是多么的孤单。


1.2、使用网络的目的

就是为了联通多方然后进行通信用的,即把数据从一方传递给另外一方。单机的程序,即不能和其他电脑上的程序进行通信,为了让在不同的电脑上运行的软件,之间能够互相传递数据,就需要借助网络的功能。

总结:使用网络能够把多方链接在一起,然后可以进行数据传递。所谓的网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信。


二、TCP/IP简介

作为新时代标杆的我们,已经离不开手机、离不开网络,对于互联网大家可能耳熟能详,但是计算机网络的出现比互联网要早很多.

2.1、什么是协议

有的说英语,有的说中文,有的说德语,说同一种语言的人可以交流,不同的语言之间就不行了。为了解决不同种族人之间的语言沟通障碍,现规定国际通用语言是英语,这就是一个规定,这就是协议。


2.2、计算机网络沟通

计算机网络沟通用什么?现在的生活中,不同的计算机只需要能够联网(有线无线都可以)那么就可以相互进行传递数据

那么不同种类之间的计算机到底是怎么进行数据传递的呢?就像说不同语言的人沟通一样,只要有一种大家都认可都遵守的协议即可,那么这个计算机都遵守的网络通信协议叫做TCP/IP协议

早期的计算机网络,都是由各厂商自己规定一套协议,IBM、Apple和Microsoft都有各自的网络协议,互不兼容,为了把全世界的所有不同类型的计算机都连接起来,就必须规定一套全球通用的协议,为了实现互联网这个目标,互联网协议簇(InternetProtocolSuite)就是通用协议标准。

因为互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协议,所以,大家把互联网的协议简称TCP/IP协议

常用的网络协议如下图所示:

说明:网际层也称为网络层,网络接口层也称为链路层


三、端口和端口号

3.1、什么是端口

TCP/IP协议中的端口指的是什么呢?端口就好一个房子的,是出入这间房子的必经之路。如果一个进程需要收发网络数据,那么就需要有这样的端口在linux系统中,端口可以有65536(2的16次方)个之多!既然有这么多,操作系统为了统一管理,所以进行了编号,这就是端口号。


3.2、端口号

端口是通过端口号来标记的,端口号只有整数,范围是从0~65535


3.3、端口分配

端口是怎样分配的?端口号不是随意使用的,而是按照一定的规定进行分配。端口的分类标准有好几种,我们这里不做详细讲解,只介绍一下知名端口和动态端口。

3.3.1、知名端口(WellKnownPorts)

知名端口是众所周知的端口号,范围从0到1023,( 80端口分配给HTTP服务,21端口分配给FTP服务)可以理解为,一些常用的功能使用的号码是估计的,好比电话号码110、10086、10010一样

3.3.2、动态端口(DynamicPorts)

动态端口的范围是从1024到65535之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配。动态分配是指当一个系统进程或应用程序进程需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。当这个进程关闭时,同时也就释放了所占用的端口号。


3.4、端口作用

端口有什么用?我们知道,一台拥有IP地址的主机可以提供许多服务,比如HTTP(万维网服务)、FTP(文件传输)、SMTP(电子邮件)等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。

需要注意的:端口并不是一一对应的。比如你的电脑作为客户机访问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则可能使用“3457”这样的端口。


四、ip地址

4.1、什么是ip地址

IP 地址是指互联网协议地址,又译为网际协议地址。IP 地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

ip地址:用来在网络中标记一台电脑的一串数字,比如192.168.1.1;在本地局域网上是惟一的


4.2、ip地址的作用

IP地址用于标识主机的地址,一个网络是由若干台主机组成的,每台主机必须有一个全球唯一的IP地址,就像我们的生活中的电话号码一样,每部电话只能有一个全球唯一的电话号码。广义上的主机可以是工作在网络中的工作站、服务器、路由器。IP地址一般是用十进制来表示的。由四个数字段来组成,中间用逗号隔开。如192.168.1.5就是一个IP地址。


4.3、ip地址的分类

每一个IP地址包括两部分:网络地址和主机地址

IP地址分为五类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验


4.3.1、A类IP地址

一个A类IP地址由1字节(8位)的网络地址和3字节(24位)主机地址组成,网络地址的最高位必须是“0”

地址范围:

1.0.0.1——126.255.255.254

二进制表示为:

00000001 00000000 00000000 00000001——01111110
11111111 11111111 11111110

可用的A类网络有126个,每个网络能容纳1677214个主机


4.3.2、B类IP地址

一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”
地址范围:

128.1.0.1——191.255.255.254

二进制表示为:

10000000 00000001 00000000 00000001——
10111111 11111111 11111111 11111110

可用的B类网络有16384个,每个网络能容纳65534主机


4.3.3、C类IP地址

一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”

范围:

192.0.1.1-223.255.255.254

二进制表示为:

11000000 00000000 00000001 00000001-
11011111 11111111 11111110 11111110

C类网络可达2097152个,每个网络能容纳254个主机


4.3.4、D类地址用于多点广播

D类IP地址第一个字节以“1110”开始,它是一个专保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中多点广播地址用来一次寻址一组计算机地址范围:224.0.0.1-239.255.255.254


4.3.5、E类IP地址

以“1111”开始,为将来使用保留E类地址保留,仅作实验和开发用

4.3.6、私有ip

在这么多网络IP中,国际规定有一部分IP地址是用于我们的局域网使用,也就是属于私网IP,不在公网中使用的,它们的范围是:

10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255

4.3.7、注意

IP地址127.0.0.1~127.255.255.255用于回路测试,如:127.0.0.1可以代表本机IP地址,用http://127.0.0.1就可以测试本机中配置的Web服务器


4.4、子网掩码

要想理解什么是子网掩码,就不能不了解IP地址的构成。互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。IP地址在设计时就考虑到地址分配的层次特点,将每个IP地址都分割成网络号和主机号两部分,以便于IP地址的寻址操作。

IP地址的网络号和主机号各是多少位呢?

如果不指定,就不知道哪些位是网络号、哪些是主机号,这就需要通过子网掩码来实现。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分子网掩码的设定必须遵循一定的规则。与IP地址相同,子网掩码长度也是32位,左边是网络位,用二进制数字“1”表示;右边是主机位,用二进制数字“0”表示。
假设IP地址为“192.168.1.1”,子网掩码为“255.255.255.0”。其中,“1”有24个,代表与此相对应的IP地址左边24位是网络号;“0”有8个,代表与此相对应的IP地址右边8位是主机号。这样,子网掩码就确定了一个IP地址的32位二进制数字中哪些是网络号、哪些是主机号。这对于采用TCP/IP协议的网络来说非常重要,只有通过子网掩码,才能表明一台主机所在的子网。


五、TCP和UDP

5.1、TCP(传输控制协议)

TCP(TransmissionControlProtocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复。

TCP建立连接要进行3次握手,而断开连接要进行4次。

5.1.1、TCP三次握手过程

第一次握手:主机A通过向主机B发送一个含有同步序列号的标志位的数据段给主机B,向主机B请求建立连接,通过这个数据段,主机A告诉主机B两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我。

第二次握手:主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用那个序列号作为起始数据段来回应我。

第三次握手:主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B的数据段:"我已收到回复,我现在要开始传输实际数据了,这样3次握手就完成了,主机A和主机B就可以传输数据了。

3次握手的特点
没有应用层的数据,SYN这个标志位只有在TCP建立连接时才会被置1握手完成后SYN标志位被置0。


5.1.2、TCP四次挥手

第一次:当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求;

第二次:主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1;

第三次:由B端再提出反方向的关闭请求,将FIN置1;

第四次:主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.。

由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础。


5.2、UDP(用户数据报协议)

  1. UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

  2. 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。

  3. UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。

  4. 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。

  5. UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要


5.3、TCP协议与UDP协议的区别

首先咱们弄清楚,TCP协议和UDP协议与TCP/IP协议的联系,很多人犯糊涂了TCP/IP协议是一个协议簇。里面包括很多协议的,UDP只是其中的一个,之所以命名为TCP/IP协议,因为TCP、IP协议是两个很重要的协议,就用他两命名了。

TCP/IP协议集包括应用层,传输层,网络层,网络访问层。

TCP协议和UDP协议的区别有以下几个:

  1. TCP协议是面向连接的协议,而UDP协议是面向无连接的协议;
  2. TCP协议在建立连接时需要三次握手,粗在建立连接后需要维护连接状态,而UDP协议不需要建立连接,不需要维护连接状态。因此TCP协议占用系统资源较多,UDP占用资源相对少;
  3. TCP数据包头最少长度为20个字节,而UDP只需8个字节;
  4. TCP协议提供可靠服务,能保证数据正确性和顺序,而UDP协议提供的服务不可靠,可能会产生丢包现象;
  5. TCP协议发送的数据为流模式,而UDP协议发送的为数据报模式。

六、socket简介

6.1、什么是socket

socket(简称套接字)是进程间通信的一种方式,它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于Socket来完成通信的。例如我们每天浏览网、QQ聊天、收发email等等。

我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket。

socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。


6.2、创建socket

在Python中使用socket模块的函数socket就可以完成:

socket.socket(AddressFamily,Type)

说明:函数socket.socket创建一个socket,返回该socket的描述符,该函数带有两个参数:
AddressFamily:可以选择AF_INET(用于Internet进程间通信)或者AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET。
Type:套接字类型,可以是SOCK_STREAM(流式套接字,主要用于TCP协议)或者SOCK_DGRAM(数据报套接字,主要用于UDP协议)。

创建一个tcpsocket(tcp套接字)

import sockets = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print('Socket Created')

创建一个udpsocket(udp套接字)

import sockets = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
print('Socket Created')

6.3、小案例:客户端和服务端通信

客户端:

import socketclient = socket.socket() #生成socket连接对象
client.connect(('127.0.0.1',6969)) #和目标主机建立连接、
client.send('我是客户端,收到请回答!!'.encode()) #想服务器发送数据
client.close()

服务端:

import socketserver = socket.socket()server.bind(('127.0.0.1',6969)) #绑定监听对象
server.listen()  #监听
print('===准备===')
conn,addr = server.accept()  #等待消息
print(f'conn:{conn} \naddr:{addr}')
data = conn.recv(1024)
print('接受到的数据:',data.decode())
server.close()

结果(服务端):

===准备===
conn:<socket.socket fd=516, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 6969), raddr=('127.0.0.1', 21545)>
addr:('127.0.0.1', 21545)
接受到的数据: 我是客户端,收到请回答!!

学习笔记(二十)—— 网络编程相关推荐

  1. Mr.J-- jQuery学习笔记(二十八)--DOM操作方法(添加方法总结)

    Table of Contents appendTo appendTo(source, target) 源代码 append prependTo ​ ​ ​ ​ prependTo源码 prepend ...

  2. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  3. uniapp 学习笔记二十二 购物车页面结构搭建

    uniapp 学习笔记二十二 购物车页面结构搭建 cart.vue <template><view><view class="flex padding" ...

  4. Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用

    Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用 大概要写到结尾了,最后几篇就将手册的各常用命令再看一遍,组合一下,并列举出常见的一些有用的操作. DATA_COLOR_MAP数 ...

  5. 学习笔记(19):Python网络编程并发编程-互斥锁

    立即学习:https://edu.csdn.net/course/play/24458/296430?utm_source=blogtoedu 1.互斥锁: 多进程间的内存是相互隔离的,因此其数据也是 ...

  6. 学习笔记(09):Python网络编程并发编程-模拟ssh远程执行命令-代码实现

    立即学习:https://edu.csdn.net/course/play/24458/296239?utm_source=blogtoedu 1.服务器端:接收客户端发送的命令,subprocess ...

  7. 学习笔记(04):Python网络编程并发编程-什么是socket

    立即学习:https://edu.csdn.net/course/play/24458/296233?utm_source=blogtoedu 1.什么是网络编程? 答:网络编程也叫做socket编程 ...

  8. JVM 学习笔记二十六、JVM监控及诊断工具-GUI篇

    二十六.JVM监控及诊断工具-GUI篇 1.工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局限: (1)无法获取方法级别的分析数据,如方法间的调用关系 ...

  9. JVM 学习笔记二十五、JVM监控及诊断工具-命令行篇

    二十五.JVM监控及诊断工具-命令行篇 1.概述 性能诊断是软件工程师在日常工作中经常面对和解决的问题,在用户体验至上的今天,解决好应用软件的性能问题能带来非常大的收益. Java作为最流行的编程语言 ...

  10. 立创eda学习笔记二十八:在嘉立创购买pcb板并贴片(smt)

    完整的写一下,分为两部分: 1.下pcb订单 这个可以看之前写的一个博客: 立创eda学习笔记三:pcb购买_Gutie_bartholomew的博客-CSDN博客 补充一下,买pcb可以直接有几个途 ...

最新文章

  1. Android动画之帧动画和补间动画
  2. Keepalived Nginx 高可用性配置
  3. Linux grep命令分析以及C语言版本的实现
  4. C++中的友元函数和友元类
  5. JDK 8 新特性 之 Strams简单使用
  6. ux设计中的各种地图_UX设计中的空白
  7. IndexError: invalid index of a 0-dim tensor. Use `tensor.item()` in Python or `tensor.item<T>()` in
  8. [Android Pro] 内容提供者ContentProvider的基本使用
  9. 基于图像的三维重建与基于三维点云数据的曲面拟合
  10. 联想小新520怎么样?对比当贝D3X哪款更值得买?
  11. winrar5.31 专用激活key
  12. 产品学习---互联网思维
  13. Map获取key的数组
  14. 申请CSDN博客专家和码云推荐项目
  15. Longest Word
  16. Debezium 抽取oracle数据
  17. HDFS删除并清空回收站
  18. 推荐算法(一)--基本介绍
  19. hdu 4009 Transfer water(最小树形图模板)
  20. 如何判断一个数是否是素数

热门文章

  1. keras cnn 代码详解
  2. sql select
  3. python redis 消息队列
  4. 用indesign怎么更换名牌姓名_颚式破碎机如何拆卸?耐磨件怎么更换,可以用多久?答案都在这里...
  5. 判断字符串数组中是否所有字符只出现了一次
  6. 机器学习之数学基础(四)~Lasso Regression回归, L1、L2 Regularization正则化, 回归问题中的损失函数
  7. python 笔记 异常处理
  8. 深度学习核心技术精讲100篇(三十一)-大众点评搜索基于知识图谱的深度学习排序实践
  9. tableau可视化数据分析60讲(六)-数据连接及数据混合
  10. python爬虫反爬 对方是如何丧心病狂的通过css_如何应对网站反爬虫策略?如何高效地爬大量数据?...