Linux 對於UDP的學習

2021-10-17 04:57:07 字數 3992 閱讀 4159

_ykitty 2019-01-07 08:51:10

分類專欄: linux

最後發布:2019-01-07 08:51:10首次發布:2019-01-07 08:51:10 版權

udp(使用者資料報協議)沒有連線的,是面向資料報的,是不可靠

就是ip位址+埠號埠號:2位元組,也就是說範圍是0~65535

ssh伺服器,使用22埠

ftp伺服器,使用21埠

telnet伺服器,使用23埠

http伺服器,使用80埠

https伺服器,使用443埠

作業系統動態分配的埠號

檢視埠號

less /etc/services //就可以檢視linux下所有的埠號了
埠號的理解:

【問題】

乙個程序是否可以bind多個埠號呢?

乙個埠號是否可以被多個程序bind?

多個程序可以監聽同乙個埠號嗎?

所以套接字就可以準確的標識一台主機上的乙個程序,從而完成計算機之間的通訊

計算機之間的通訊:

對於資料在網路中傳輸的時候有著自己遵循的傳輸規則大端傳輸對於主機上的資料的傳輸序列有著兩種:

所以對於主機上的資料傳輸的時候傳輸到網路上的時候有可能導致資料錯誤(例如主機上是小端的時候,所以需要進行轉換)

轉換函式:

#include ​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:表示網路network

l:表示4位元組long

s:表示2位元組short

in_addr轉化為字串

udp協議端格式插圖:udp協議端格式

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

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

長度:udp使用者資料報的長度,其最小值是8(僅有首部)

udp的特點

面向資料報

udp的快取區

udp的socket既能讀,也能寫,全雙工

udp的使用注意事項

偽首部:

插圖:偽首部

基於udp的應用層的協議

面試題用udp實現可靠傳輸?

參考tcp的可靠性機制,在應用層實現類似的邏輯

int socket(int domain, int type, int protocol);​domain: 領域    af_inet:ipv4    af_inet6:ipv6type: 型別    sock_stream    sock_dgarmprotocol: 協議
在通訊領域中建立乙個未被繫結的套接字,並且返回乙個檔案描述符,可以在以後對套接字進行操作的函式呼叫中使用

int bind(int socket, const struct sockaddr* address, socklen_t address_len);
該函式採用先前建立好的套接字來對於ip位址以及埠號進行繫結,也就是表示該套接字可以標識出在乙個網路中一台確定的主機並且主機中的程序

ssize_t recvfrom(int socket, void* restrict buffer, size_t length,                  int flags, struct sockaddr* restrict address,                 socklen_t* restrict address_len);​socket:要接受那乙個套接字的訊息buffer:用來接收訊息的快取區length:接收的訊息的長度flags:型別address:空指標或者儲存傳送資訊的sockaddr結構addless_len:指定位址引數指向的sockaddr結構的長度3.2 函式的作用
用來接收從socket套接字傳送來的訊息。該套接字的sockaddr結構也知道

ssize_t recvfrom(int socket, const void* message, size_t length,                  int flags, const struct sockaddr* dest_addr,                 socklen_t* dest_len);
該函式是socket套接字從dest_addr出接收訊息

netstat是乙個用來監控tcp/ip網路非重要工具語法:netstat [選項]

**功能:**檢視網路狀態

選項:

檢視伺服器程序id是非常方面**語法:**pisdof [程序名]

**功能:**通過程序名,檢視程序id

基於ssh登入進行的網路安全的遠端檔案拷貝命令例:要將自己當前路徑下的clinet檔案傳送到主機ip為192.168.153.140的home目錄下

scp ./clinet [email protected]:/home
由於udp是無連線的,所以對於兩個處於同一區域網下計算機的程序之間通訊,所以是不需要兩台計算機之間的程序進行連線的,對於udp使用的介面是需要包含知道從**接收訊息的,要傳送訊息到**的。

然後就接受客戶端發來的訊息

對於客戶端的訊息進行處理然後就可以再次將處理後的訊息進行返回

插圖:伺服器流程

客戶端

客戶端只需要向伺服器傳送訊息

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

插圖:客戶端流程

實現處於同一區域網下的不同主機間進行通訊

客戶端

啟動伺服器

Linux 對於UDP的學習

udp 使用者資料報協議 沒有連線的,是面向資料報的,是不可靠 就是ip位址 埠號埠號 2位元組,也就是說範圍是0 65535 ssh伺服器,使用22埠 ftp伺服器,使用21埠 telnet伺服器,使用23埠 http伺服器,使用80埠 https伺服器,使用443埠 作業系統動態分配的埠號 檢視...

對於Socket的UDP資料廣播的重新認識

原來一直認為,udp廣播就是對已知的一連串ip位址來逐個傳送資料報,我的機房遠端協助程式就是這樣寫出來的,但是今天在學習wol的時候,我才發現,我原來的觀點是錯誤的,於是,我發起了對udp資料廣播的重新認識 下面給出windows下udp傳送廣播資料 udp廣播位址為255.255.255.255 ...

Linux學習筆記之 基於UDP的通訊程式設計

13 基於udp的通訊程式設計 13.1 udp資料的收發 1.資料傳送函式sendto include include int sendto int s,const void msg,int len,int flags,const struct sockaddr to,int tolen 前四個引...