网络-UDP

1. ip地址

咱们都有使用QQ的经历, 咱们想要给咱们的朋友发一个消息你好啊!, 这个消息是怎么到达朋友的电脑上的呢? 而ip地址的做用这个时候就体现出来了. 接下来咱们先来了解一下!linux

下面是一个局域网的网络拓扑图, 咱们想要从李四的电脑上发个来吃完饭的消息给到张三, 须要进过一层一层的到达, 以下图bash

用来在网络中标记一台电脑,好比192.168.1.1;在本地局域网上是惟一的服务器

2. ip地址的分类

若是咱们处于同一个局域网中, 可能咱们的地址是192.168.33.xx, 其中192.168.33就是网络号, xx就是主机号, 也就是咱们每一台电脑就至关于一台主机, 若是咱们之间想要通讯, 这个网络号必须相同, 主机号不能够相同. 前面表示相同的网络, 后面表示不一样的主机, 理论上来讲在同一个网络下, 咱们可以使用的范围是0~255也就是256个地址, 但这里要说一下最大的和最小的不能够用, 也就是说192.168.33.0192.168.33.255这两个地址不能够用. 因此在同一网络中最多容纳254台ipz地址主机微信

但实际状况是, 最后一位做为主机号并不可以知足当前网络的使用需求, 因此就有多是这样192.168做为网络号, 然后面的做为主机号, 这样就能够知足 256*256台主机. 而咱们的A类B类C类就是这样来的. 根据未来咱们的网络中主机的使用个数, 进行划分网络

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

  • A类IP地址

一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”,地址范围1.0.0.1-126.255.255.254, 二进制表示为:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110, 可用的A类网络有126个,每一个网络能容纳1677214个主机tcp

  • 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主机工具

  • 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个主机oop

  • D类地址用于多点广播(单播, 多播, 广播)测试

    • 单播: 一对一
    • 多播: 一对多
    • 广播: 一对全部

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

  • E类IP地址

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

  • 私有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
复制代码

注意

IP地址127.0.0.1 ~ 127.255.255.255用于回路测试

查看本机的IP地址

ifconfig(Linux) / ipconfig(Windows)

咱们使用ifconfg来查看当前的地址

xxzxdeMacBook-Pro:~ xxzx$ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
	options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
	inet 127.0.0.1 netmask 0xff000000 
	inet6 ::1 prefixlen 128 
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
	nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
XHC20: flags=0<> mtu 0
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
	options=60<TSO4,TSO6>
	ether 4a:00:07:62:ce:40 
	media: autoselect <full-duplex>
	status: inactive
en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
	options=60<TSO4,TSO6>
	ether 4a:00:07:62:ce:41 
	media: autoselect <full-duplex>
	status: inactive
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether c4:b3:01:cb:53:97 
	inet6 fe80::1898:be0b:d499:475c%en0 prefixlen 64 secured scopeid 0x7 
	inet 10.75.20.81 netmask 0xffffff00 broadcast 10.75.20.255
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=63<RXCSUM,TXCSUM,TSO4,TSO6>
	ether 4a:00:07:62:ce:40 
	Configuration:
		id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
		maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
		root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
		ipfilter disabled flags 0x2
	member: en1 flags=3<LEARNING,DISCOVER>
	        ifmaxaddr 0 port 5 priority 0 path cost 0
	member: en2 flags=3<LEARNING,DISCOVER>
	        ifmaxaddr 0 port 6 priority 0 path cost 0
	nd6 options=201<PERFORMNUD,DAD>
	media: <unknown type>
	status: inactive
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
	ether 06:b3:01:cb:53:97 
	media: autoselect
	status: inactive
awdl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1484
	ether ba:49:5e:fc:11:b4 
	inet6 fe80::b849:5eff:fefc:11b4%awdl0 prefixlen 64 scopeid 0xa 
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
	inet6 fe80::26d5:7b0:7285:d2ae%utun0 prefixlen 64 scopeid 0xb 
	nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
	inet6 fe80::5ec1:8b8b:17f5:a0ba%utun1 prefixlen 64 scopeid 0xc 
	nd6 options=201<PERFORMNUD,DAD>
utun2: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
	inet6 fe80::955e:295d:2d4b:9867%utun2 prefixlen 64 scopeid 0xd 
	nd6 options=201<PERFORMNUD,DAD>
en4: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether 86:a1:34:5f:4d:5d 
	inet6 fe80::18d7:5ae1:41e6:f72f%en4 prefixlen 64 secured scopeid 0xe 
	inet 169.254.128.31 netmask 0xffff0000 broadcast 169.254.255.255
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect (100baseTX <full-duplex>)
	status: active
复制代码

在Mac电脑中会展现如上内容, 其中有一个en0里面就包含咱们所要查看ip地址, 那其余的都是些什么呢

lo0 = loopback
gif0 = Software Network Interface
stf0 = 6to4 tunnel interface
en0 = Ethernet 0
fw0 = Firewire
en1 = Ethernet 1
vmnet1 = Virtual Interface
复制代码

咱们使用命令networksetup -listallhardwareports查看一下, 能够知道是一些硬件信息, 好比USB接口, 蓝牙, 雷电口等

xxzxdeMacBook-Pro:~ xxzx$ networksetup -listallhardwareports

Hardware Port: iPhone USB
Device: en4
Ethernet Address: 86:a1:34:5f:4d:5d

Hardware Port: Wi-Fi
Device: en0
Ethernet Address: c4:b3:01:cb:53:97

Hardware Port: Bluetooth PAN
Device: en3
Ethernet Address: c4:b3:01:cb:53:98

Hardware Port: Thunderbolt 1
Device: en1
Ethernet Address: 4a:00:07:62:ce:40

Hardware Port: Thunderbolt 2
Device: en2
Ethernet Address: 4a:00:07:62:ce:41

Hardware Port: Thunderbolt Bridge
Device: bridge0
Ethernet Address: 4a:00:07:62:ce:40

VLAN Configurations
===================
复制代码

关闭开启网卡

  • 使用图形界面

  • 使用命令(加上sudo使用提高权限, 密码为当前的电脑密码)
xxzxdeMacBook-Pro:~ xxzx$ sudo ifconfig en0 down
Password:
xxzxdeMacBook-Pro:~ xxzx$ sudo ifconfig en0 up
复制代码

端口

上面咱们介绍了什么是ip地址. 咱们知道如今咱们能够经过ip地址去找到对应的主机. 一样咱们以聊天工具QQ为例, 咱们从一台电脑发送一条消息到另外一台电脑. 咱们知道这个消息能够经过ip地址到达这台目标电脑, 可是咱们的电脑是怎么知道这个消息是发送给什么应用呢. 是发给QQ仍是微信或者是钉钉呢. 这个时候咱们就引伸出端口这个概念.

端口号

若是一个程序须要收发网络数据,那么就须要有这样的端口在linux系统中,端口能够有65536(2的16次方)个之多!既然有这么多,操做系统为了统一管理,因此进行了编号,这就是端口号

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

注意:端口数不同的*nix系统不同,还能够手动修改

端口的分配

端口号不是随意使用的,而是按照必定的规定进行分配。

知名端口(Well Known Ports)
80端口分配给HTTP服务
21端口分配给FTP服务
复制代码

咱们能够理解成, 一些经常使用的功能使用的号码是估计的,比如 电话号码1十、1008六、10010同样, 通常状况下,若是一个程序须要使用知名端口的须要有root权限

动态端口(Dynamic Ports)

动态端口的范围是从1024到65535, 之因此称为动态端口,是由于它通常不固定分配某种服务,而是动态分配。

动态分配是指当一个系统程序或应用程序程序须要网络通讯时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。

当这个程序关闭时,同时也就释放了所占用的端口号

查看端口
  • 用“netstat -an”查看端口状态
  • lsof -i [tcp/udp]:2425

端口总结

端口有什么用呢 ? 咱们知道,一台拥有IP地址的主机能够提供许多服务,好比HTTP(万维网服务)、FTP(文件传输)、SMTP(电子邮件)等,这些服务彻底能够经过1个IP地址来实现。那么,主机是怎样区分不一样的网络服务呢?显然不能只靠IP地址,由于IP地址与网络服务的关系是一对多的关系。其实是经过“IP地址+端口号”来区分不一样的服务的。 须要注意的是,端口并非一一对应的。好比你的电脑做为客户机访问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通讯,但你的电脑则可能使用“3457”这样的端口。

socket简介

首要解决的问题是如何惟一标识一个进程,不然通讯无从谈起!

在1台电脑上能够经过进程号(PID)来惟一标识一个进程,可是在网络中这是行不通的。

其实TCP/IP协议族已经帮咱们解决了这个问题,网络层的“ip地址”能够惟一标识网络中的主机,而传输层的“协议+端口”能够惟一标识主机中的应用进程(进程)。

这样利用ip地址,协议,端口就能够标识网络的进程了,网络中的进程通讯就能够利用这个标志与其它进程进行交互

什么是socket

socket(简称 套接字) 是进程间通讯的一种方式,它与其余进程间通讯的一个主要不一样是:

它能实现不一样主机间的进程间通讯,咱们网络上各类各样的服务大多都是基于 Socket 来完成通讯的

例如咱们天天浏览网页、QQ 聊天、收发 email 等等

套接字是一个能够同时收发数据的分别是:

  • 单工, 指的是只能向一个方向走, 好比收音机, 咱们就只能听
  • 半双工, 好比对讲机, 能够收也能够发, 可是发的时候收不了, 收的时候发不了
  • 全双工, 同一时刻能够同时收和发, 好比打电话. 能够边听边说
相关文章
相关标签/搜索