一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux關(guān)于UDP的學(xué)習(xí)詳細講解

jf_f8pIz0xS ? 來源:CSDN技術(shù)社區(qū) ? 作者:_YKitty ? 2021-05-02 16:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前序

UDP(用戶數(shù)據(jù)報協(xié)議)沒有連接的,是面向數(shù)據(jù)報的,是不可靠

套接字

就是IP地址+端口

IP地址:4字節(jié)

端口號:2字節(jié),也就是說范圍是0~65535

端口號分為

知名端口號

0--1023:http,ssh,ftp,telnet等一些協(xié)議端口號都是固定的,對于操作系統(tǒng)來說是不能對其進行分配的

一些固定的端口號

ssh服務(wù)器,使用22端口

ftp服務(wù)器,使用21端口

telnet服務(wù)器,使用23端口

http服務(wù)器,使用80端口

https服務(wù)器,使用443端口

操作系統(tǒng)動態(tài)分配的端口號

客戶端服務(wù)器的端口號,這個范圍的端口號操作系統(tǒng)可以對其進行分配

查看端口號

less /etc/services

//就可以查看Linux下所有的端口號了

IP地址的理解:

IP地址用來標(biāo)識一個主機

端口號的理解:

端口號就是用來告訴操作系統(tǒng)要對于那一個進程進行操作,也就是說端口號就是用來標(biāo)識一個進程

一個端口號只可被一個進程所占用,但是一個進程可以擁有多個端口號,也就是進程和端口號是一對多的關(guān)系

當(dāng)我們寫一個程序使用端口號的時候,要避開這些知名端口號

【問題】

一個進程是否可以bind多個端口號呢?

可以,因為一個進程可以打開多個文件描述符,而每一個文件描述符都對應(yīng)著一個端口號,所以一個進程可以綁定多個端口號

一個端口號是否可以被多個進程bind?

不可以

如果一個進程先綁定一個端口號,然后再fork一個子進程,這樣的話就實現(xiàn)了多個進程綁定一個端口號,但是不同的進程綁定同一個端口號是不可以的

TIME_WAIT狀態(tài),服務(wù)器不能立即重啟也說明不用進程不能同時綁定同一個端口號

多個進程可以監(jiān)聽同一個端口號嗎?

可以。監(jiān)聽之前要進行創(chuàng)建套接字-》綁定ip::端口號-》監(jiān)聽。我們可以在bind之前使用setsockopt函數(shù),設(shè)置套接字選項,其中就包括REUSEADDR這個選項,表明多個進程可以復(fù)用bind函數(shù)中指定的地址和端口號

所以套接字就可以準確的標(biāo)識一臺主機上的一個進程,從而完成計算機之間的通信

計算機之間的通信:

主機A的某個進程與主機B上的另一個進程進行通信

網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換

對于數(shù)據(jù)在網(wǎng)絡(luò)中傳輸?shù)臅r候有著自己遵循的傳輸規(guī)則大端傳輸

對于主機上的數(shù)據(jù)的傳輸序列有著兩種:

大端:即高位字節(jié)序放在低地址上

小端:即低位字節(jié)序放在低地址上

傳輸:均是先傳輸?shù)偷刂飞系臄?shù)據(jù)然后是高地址上的數(shù)據(jù)

所以對于主機上的數(shù)據(jù)傳輸?shù)臅r候傳輸?shù)骄W(wǎng)絡(luò)上的時候有可能導(dǎo)致數(shù)據(jù)錯誤(例如主機上是小端的時候,所以需要進行轉(zhuǎn)換)

轉(zhuǎn)換函數(shù):

#include 《arpa/inet.h》

uint32_t htonl(uint32_t hostlong);

uint16_t htons(uint16 hostshort);

uint32_t ntohl(uint32_t netlong);

uint16_t ntohs(uint16_t netshort);

h:表示主機host name

n:表示網(wǎng)絡(luò)network

l:表示4字節(jié)long

s:表示2字節(jié)short

地址轉(zhuǎn)換函數(shù)

字符串轉(zhuǎn)化為in_addr

in_addr_t inet_addr(const char* strptr)

in_addr轉(zhuǎn)化為字符串

char* inet_ntoa(struct in_addr inaddr)

具有不可重入性,也就是不可多次調(diào)用,因為該函數(shù)自己在靜態(tài)區(qū)開辟一塊空間用來存放IP地址字符串的

UDP協(xié)議

UDP協(xié)議端格式

插圖:UDP協(xié)議端格式

16為UDP長度,表示整個數(shù)據(jù)報(UDP首部+UDP數(shù)據(jù))的最大長度(64KB)

檢驗和:如果校驗和出錯,就會直接丟棄(檢驗的是把首部和數(shù)據(jù)部分一起都檢驗)

校驗值首先在數(shù)據(jù)發(fā)送方通過特殊的算法計算得出,在傳遞到接收方之后,還要在重新計算。如果某個數(shù)據(jù)報在傳輸過程中被第三方篡改或者由于線路噪音等原因受到損壞,發(fā)送和接收方的校驗計算值將不會相符,由此UDP協(xié)議可以檢驗是否出錯。

源端口號:在對方回信是選用,不需要時可用全0

目的端口號:在終點交付報時必須要用到

長度:UDP用戶數(shù)據(jù)報的長度,其最小值是8(僅有首部)

UDP的特點

無連接:直到對端的IP和端口號就直接進行傳輸,不需要建立連接

不可靠:沒有確認機制,沒有重傳機制;因為沒有網(wǎng)絡(luò)故障該段無法發(fā)送到對方,UDP協(xié)議層也不會給應(yīng)用層返回任何錯誤信息

面向數(shù)據(jù)報:不能夠靈活的控制讀寫數(shù)據(jù)的次數(shù)和數(shù)量

控制選項較少,數(shù)據(jù)傳輸過程中延遲小,數(shù)據(jù)傳輸效率高

面向數(shù)據(jù)報

應(yīng)用層交給UDP多長的報文,UDP原樣發(fā)送,既不會拆分也不會合并

例:用UDP傳輸100個字節(jié)的數(shù)據(jù)

如果發(fā)送端調(diào)用一次sendto,發(fā)送100個字節(jié)。那么接收端也必須調(diào)用對應(yīng)的一次recvfrom,接收100字節(jié);而不能循環(huán)調(diào)用10次recvfrom,每次發(fā)送10個字節(jié)

UDP的緩存區(qū)

UDP沒有發(fā)送緩存區(qū),調(diào)用sendto之后會直接交給內(nèi)核,由內(nèi)核·將數(shù)據(jù)傳給網(wǎng)絡(luò)層協(xié)議進行后續(xù)的傳輸動作。因為UDP是不面向連接的,所以沒有重發(fā)機制,也就不需要發(fā)送緩存區(qū)將已經(jīng)發(fā)送的數(shù)據(jù)保存下來為了發(fā)送失敗進行重傳做準備

UDP具有接收緩存區(qū)。但是這個接收緩存區(qū)不能保證收到的UDP報的順序和發(fā)送UDP報的順序一致;如果緩存區(qū)滿了,在到達的UDP數(shù)據(jù)就會被丟棄

UDP的Socket既能讀,也能寫,全雙工

UDP的使用注意事項

UDP協(xié)議首部中有一個16位的最大長度,也就是說一個UDP能傳輸?shù)臄?shù)據(jù)的最大長度是64K(包含UDP首部)。但是64K在當(dāng)今的互聯(lián)網(wǎng)環(huán)境下,是一個非常小的數(shù)字。如果我們需要傳輸?shù)臄?shù)據(jù)超過64K,就需要應(yīng)用層手動的分包,多次發(fā)送,并在接收端拼裝

UDP首部中校驗和的計算方法有些特殊。在計算校驗和時,要在UDP用戶數(shù)據(jù)報之前增加12個字節(jié)的偽首部

偽首部既不向下傳輸也不想上遞送,而僅僅是為了計算校驗和

與IP數(shù)據(jù)報的校驗和只檢驗IP數(shù)據(jù)報的首部不同,UDP的校驗和是把首部和數(shù)據(jù)部分一起都檢驗

偽首部:

插圖:偽首部

基于UDP的應(yīng)用層的協(xié)議

NFS:網(wǎng)絡(luò)文件系統(tǒng)

TFTP:簡單文件傳輸文件協(xié)議

DHCP:動態(tài)主機配置協(xié)議

DNS:域名解析協(xié)議

面試題:用UDP實現(xiàn)可靠傳輸?

參考TCP的可靠性機制,在應(yīng)用層實現(xiàn)類似的邏輯

引用序列號,保證數(shù)據(jù)順序

引入確認應(yīng)答,確保對端收到了數(shù)據(jù)

引入超時重傳,如果隔一段時間沒有應(yīng)答,就重發(fā)數(shù)據(jù)

1. 對于socket函數(shù)的使用

1.1 函數(shù)原型

int socket(int domain, int type, int protocol);

domain: 領(lǐng)域

AF_INET:IPV4

AF_INET6:IPV6

type: 類型

SOCK_STREAM

SOCK_DGARM

protocol: 協(xié)議

1.2 函數(shù)的作用

在通信領(lǐng)域中創(chuàng)建一個未被綁定的套接字,并且返回一個文件描述符,可以在以后對套接字進行操作的函數(shù)調(diào)用中使用

2. 對于bind函數(shù)的使用

2.1 函數(shù)原型

int bind(int socket, const struct sockaddr* address, socklen_t address_len);

2.2. 函數(shù)的作用

該函數(shù)采用先前創(chuàng)建好的套接字來對于IP地址以及端口號進行綁定,也就是表示該套接字可以標(biāo)識出在一個網(wǎng)絡(luò)中一臺確定的主機并且主機中的進程

3. 對于recvfrom函數(shù)的使用

3.1 函數(shù)原型

ssize_t recvfrom(int socket, void* restrict buffer, size_t length,

int flags, struct sockaddr* restrict address,

socklen_t* restrict address_len);

socket:要接受那一個套接字的消息

buffer:用來接收消息的緩存區(qū)

length:接收的消息的長度

flags:類型

address:空指針或者存儲發(fā)送信息的sockaddr結(jié)構(gòu)

addless_len:指定地址參數(shù)指向的sockaddr結(jié)構(gòu)的長度

3.2 函數(shù)的作用

用來接收從socket套接字發(fā)送來的消息。該套接字的sockaddr結(jié)構(gòu)也知道

4. 對于sendto函數(shù)的使用

4.1 函數(shù)原型

ssize_t recvfrom(int socket, const void* message, size_t length,

int flags, const struct sockaddr* dest_addr,

socklen_t* dest_len);

4.2 函數(shù)的作用

該函數(shù)是socket套接字從dest_addr出接收消息

5. 擴展知識

5.1 netstat

netstat是一個用來監(jiān)控TCP/IP網(wǎng)絡(luò)非重要工具

語法:netstat [選項]

功能:查看網(wǎng)絡(luò)狀態(tài)

選項:

-a,顯示所有連線的Socket

-c,持續(xù)列出網(wǎng)絡(luò)狀態(tài)

-n,直接使用ip地址,而不通過域名服務(wù)器,也就是顯示為數(shù)字

-l,顯示監(jiān)控中的服務(wù)器的Socket,僅列出監(jiān)聽(Listen)狀態(tài)下的Socket

-p,顯示正在使用Socket的程序的識別碼和名稱(PID/Program name)

-t,顯示TCP傳輸協(xié)議的連線狀況

-u,顯示UDP傳輸協(xié)議的連線狀況

-v,顯示指令執(zhí)行過程

-V,顯示版本信息

-x,顯示UNIX傳輸協(xié)議的連線狀況

-s,顯示網(wǎng)絡(luò)工作信息統(tǒng)計表

-h,在線幫助

5.2 pidof

查看服務(wù)器進程id是非常方面

語法:pisdof [進程名]

功能:通過進程名,查看進程id

5.3 scp命令

基于ssh登錄進行的網(wǎng)絡(luò)安全的遠程文件拷貝命令

例:要將自己當(dāng)前路徑下的clinet文件發(fā)送到主機IP為192.168.153.140的home目錄下

scp 。/clinet root@192.168.153.140:/home

5.4 關(guān)于防火墻的命令

啟動:systemctl start firewalld

關(guān)閉:systemctl stop firewalld

查看狀態(tài):systemctl status firewalld

開機禁用:systemctl disable firewalld

開機啟用:systemctl enable firewalld

# 對于UDP書寫服務(wù)器的思路

由于UDP是無連接的,所以對于兩個處于同一局域網(wǎng)下計算機的進程之間通信,所以是不需要兩臺計算機之間的進程進行連接的,對于UDP使用的接口是需要包含知道從哪里接收消息的,要發(fā)送消息到哪里的。

實現(xiàn)本地通信

服務(wù)器

只需要服務(wù)器創(chuàng)建一個套接字

使該套接字對于本地地址(127.0.0.1)進行綁定,并且綁定一個端口號(1024--65535)就行了

綁定本地地址是為了對于本地計算機的兩個進程進程通信,而綁定端口號是為了綁定一個進程,是為了對于客戶端進行發(fā)送消息到服務(wù)器的時候,可以找到服務(wù)器

然后就接受客戶端發(fā)來的消息

對于客戶端的消息進行處理然后就可以再次將處理后的消息進行返回

插圖:服務(wù)器流程

客戶端

綁定一個套接字

為了綁定一個進程,可以和服務(wù)器進行通信,將消息發(fā)送過去的時候要讓服務(wù)器知道是哪一個進程再和他進程通信

客戶端只需要向服務(wù)器發(fā)送消息

然后再次從客戶端接收消息就好了,不需要考慮要進行連接

插圖:客戶端流程

實現(xiàn)處于同一局域網(wǎng)下的不同主機間進行通信

服務(wù)器

和本地通信的一致,只是對于套接字綁定的ip地址不一樣了

也對于套接字要綁定該局域網(wǎng)的ip地址以及一個端口號,不需要在綁定本地地址(127.0.0.1)了

這樣的話處于同一局域網(wǎng)下的計算機的進程就可以進行通信了

客戶端

對于客戶端來說沒有任何改變,仍然是只需要知道服務(wù)器的ip和端口號就行了

對于UDP服務(wù)器要注意的問題

啟動客戶端

啟動客戶端的時候必須給客戶端輸入一個ip地址和端口號,這個ip地址和端口號也就是要知道客戶端要發(fā)送消息給哪一個服務(wù)器進行發(fā)送

啟動服務(wù)器

必須要給服務(wù)器綁定一個ip地址和端口號,也就是要注意該服務(wù)器處于該計算機上的哪一個進程上
編輯:lyn

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11508

    瀏覽量

    213633
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    13

    文章

    9784

    瀏覽量

    87872
  • UDP
    UDP
    +關(guān)注

    關(guān)注

    0

    文章

    330

    瀏覽量

    34613
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    L298電機驅(qū)動模塊的詳細講解

    電動小車的組成 ? 一個電動小車整體的運行性能,首先 取決于它的電源模塊和電機驅(qū)動模塊。 ? 電機驅(qū)動模塊主要功能:驅(qū)動小車輪子 轉(zhuǎn)動,使小車行進。 ? 電源模塊:顧名思義,就是為整個系統(tǒng) 提供動力支持的部分 下載PDF文檔了解L298電機驅(qū)動模塊詳細講解
    發(fā)表于 02-26 15:53

    開源直接用!UDP-UART數(shù)據(jù)透傳來了

    今天就來分享一下UDP-UART透傳示例,源碼開放,可根據(jù)實際需求靈活應(yīng)用。 一、UDP-UART透傳簡介 UDP-UART透傳是一種將UDP數(shù)據(jù)流直接傳輸?shù)経ART接口的通信方式。它
    的頭像 發(fā)表于 02-05 17:14 ?328次閱讀
    開源直接用!<b class='flag-5'>UDP</b>-UART數(shù)據(jù)透傳來了

    【ELF 2學(xué)習(xí)板試用】板卡接口功能測試

    ,可以說是從基礎(chǔ)講起。前面是硬件部分的講解,每個硬件模塊也都詳細的進行講解。之后是Linux講解,虛擬機的搭建和常用指令也都進行了
    發(fā)表于 01-18 23:24

    Web端TCP/UDP測試工具!小白必學(xué)~

    Web端TCP/UDP測試工具,方便大家進行各種基于TCP和TDP的模擬測試。該測試工具不僅支持TCP和UDP測試,還支持SSL,使用極為便捷。 按照如下測試示例步驟,即可把TCP/UDP web
    的頭像 發(fā)表于 01-08 18:17 ?1252次閱讀
    Web端TCP/<b class='flag-5'>UDP</b>測試工具!小白必學(xué)~

    低功耗模組軟件的UDP示例 基礎(chǔ)教程篇

    本文以常用的低功耗4G模組Air724UG為例,做出關(guān)于低功耗模組軟件的UDP示例,以供大家參考。
    的頭像 發(fā)表于 12-02 14:53 ?613次閱讀
    低功耗模組軟件的<b class='flag-5'>UDP</b>示例   基礎(chǔ)教程篇

    芯片封裝工藝詳細講解

    芯片封裝工藝詳細講解
    發(fā)表于 11-29 14:02 ?2次下載

    4G模組Air724UG軟件示例:UDP實戰(zhàn)演練!

    關(guān)于4G模組Air724UG軟件的UDP示例,今天我將對其實戰(zhàn)演練,整理成文示例展示:
    的頭像 發(fā)表于 11-26 12:10 ?551次閱讀
    4G模組Air724UG軟件示例:<b class='flag-5'>UDP</b>實戰(zhàn)演練!

    socket 和 UDP 協(xié)議的對比

    在現(xiàn)代互聯(lián)網(wǎng)技術(shù)中,數(shù)據(jù)傳輸是核心功能之一。為了實現(xiàn)這一功能,我們依賴于各種通信協(xié)議和接口。Socket 和 UDP 是兩種廣泛使用的網(wǎng)絡(luò)通信技術(shù),它們在實現(xiàn)網(wǎng)絡(luò)通信方面各有特點和用途
    的頭像 發(fā)表于 11-12 14:28 ?892次閱讀

    奇妙的Air780E之UDP應(yīng)用示例大賞!

    關(guān)于UDP是一種無連接的、不可靠的傳輸層協(xié)議,主要用于實現(xiàn)網(wǎng)絡(luò)中的快速通訊,我們今天將把Air780E的UDP應(yīng)用分析透徹。
    的頭像 發(fā)表于 11-04 09:25 ?735次閱讀
    奇妙的Air780E之<b class='flag-5'>UDP</b>應(yīng)用示例大賞!

    TCP&UDP調(diào)試工具

    TCP&UDP調(diào)試工具
    發(fā)表于 10-30 10:41 ?3次下載

    UDP丟包的原因和解決方案

    每個 UDP 報文分為 UDP 報頭和 UDP 數(shù)據(jù)區(qū)兩部分。報頭由 4 個 16 位長(2 字節(jié))字段組成,分別說明該報文的源端口、目的端口、報文長度和校驗值。
    的頭像 發(fā)表于 10-22 14:38 ?4473次閱讀
    <b class='flag-5'>UDP</b>丟包的原因和解決方案

    入門?畢設(shè)?競賽?項目練手?STM32/嵌入式/物聯(lián)網(wǎng)學(xué)習(xí),有這幾款開發(fā)板就夠了!

    針對STM32單片機、嵌入式Linux、物聯(lián)網(wǎng)初學(xué)者,我們精心梳理了從“入門到項目進階”完整學(xué)習(xí)路徑,并配有詳細的教程、視頻講解、源代碼以及豐富的實戰(zhàn)案例資料??蓮V泛用于高校教學(xué)、學(xué)生
    的頭像 發(fā)表于 10-10 16:31 ?1102次閱讀
    入門?畢設(shè)?競賽?項目練手?STM32/嵌入式/物聯(lián)網(wǎng)<b class='flag-5'>學(xué)習(xí)</b>,有這幾款開發(fā)板就夠了!

    電感技術(shù)的講解

    詳細講解電感的原理及計算
    的頭像 發(fā)表于 09-06 02:07 ?2921次閱讀
    電感技術(shù)的<b class='flag-5'>講解</b>

    第12章-ADC采集電壓和顯示 基于STM32的ADC—電壓采集(詳細講解+HAL庫)

    第12章-ADC采集電壓和顯示 基于STM32的ADC—電壓采集(詳細講解+HAL庫)
    的頭像 發(fā)表于 08-21 16:31 ?5269次閱讀
    第12章-ADC采集電壓和顯示 基于STM32的ADC—電壓采集(<b class='flag-5'>詳細</b><b class='flag-5'>講解</b>+HAL庫)

    tcp和udp的區(qū)別和聯(lián)系

    揮著重要作用。然而,它們在設(shè)計、功能和性能方面存在顯著差異。 二、TCP與UDP的定義 傳輸控制協(xié)議(TCP) TCP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。它由IETF(互聯(lián)網(wǎng)工程任務(wù)組)在1981年定義,并在RFC 793中進行了詳細描述。TC
    的頭像 發(fā)表于 08-16 11:06 ?1068次閱讀