網絡-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 等等

套接字是一個能夠同時收發數據的分別是:

  • 單工, 指的是隻能向一個方向走, 好比收音機, 咱們就只能聽
  • 半雙工, 好比對講機, 能夠收也能夠發, 可是發的時候收不了, 收的時候發不了
  • 全雙工, 同一時刻能夠同時收和發, 好比打電話. 能夠邊聽邊說
相關文章
相關標籤/搜索