網絡基礎2-2(傳輸層,端口,詳談UDP)

傳輸層

負責數據能夠從發送端傳輸接收端.

端口號

  1. 端口號(Port)標識了一個主機上進行通信的不同的應用程序;
  2. 在TCP/IP協議中, 用 “源IP”, “源端口號”, “目的IP”, “目的端口號”, “協議號” 這樣一個五元組來標識一個通信(可以通過 netstat -n查看);
  3. 一個端口只能被一個進程占用,一個進程可以使用多個端口

端口號范圍劃分

  1. 0 - 1023: 知名端口號, HTTP, FTP, SSH等這些廣為使用的應用層協議, 他們的端口號都是固定的.
  2. 1024 - 65535: 操作系統動態分配的端口號. 客戶端程序的端口號, 就是由操作系統從這個范圍分配的

查看知名端口

cat /etc/services 

兩個問題

  1. 一個進程是否可以bind多個端口號?
    可以
    因為一個進程可以打開多個文件描述符,而每個文件描述符都對應一個端口號,所以一個進程可以綁定多個端口號
  2. 一個端口號是否可以被多個進程bind?
    不可以

UDP協議

UDP協議格式

udp協議字段:

16位源端口,16位目的端口:負責端與端之間傳輸
16位校驗和:驗證數據的完整一致性(二進制反碼求和)
16位udp數據報總長度:udp數據報總長度的存儲只有16位,意味著一個包含有頭部信息的udp數據報最大長度=65535字節,意味著如果發送的數據長度大于65535-8大小,則這個數據需要用戶在應用層進行數據分段;因為udp不會在傳輸層自動進行數據分段
在這里插入圖片描述

注意
  1. 16位UDP長度, 表示整個數據報(UDP首部+UDP數據)的大長度;
  2. 如果校驗和(二進制反碼求和)出錯, 就會直接丟棄;

UDP的特點

UDP傳輸的過程類似于寄信.

  1. 無連接: 知道對端的IP和端口號就直接進行傳輸, 不需要建立連接;
  2. 不可靠: 沒有確認機制, 沒有重傳機制; 如果因為網絡故障該段無法發到對方, UDP協議層也不會給應用層 返回任何錯誤信息,沒有粘包問題;
  3. 面向數據報: 不能夠靈活的控制讀寫數據的次數和數量,數據只能整條整條的交付給應用層
  4. udp不保證數據報的有序到達,需要用戶在應用層進行包序管理

面向數據報

應用層交給UDP多長的報文, UDP原樣發送, 既不會拆分, 也不會合并
例如:
如果發送端調用一次sendto, 發送100個字節, 那么接收端也必須調用對應的一次recvfrom, 接收100個 字節; 而不能循環調用10次recvfrom, 每次接收10個字節;

UDP的緩沖區

  1. UDP沒有真正意義上的 發送緩沖區. 調用sendto會直接交給內核, 由內核將數據傳給網絡層協議進行后 續的傳輸動作
  2. UDP具有接收緩沖區. 但是這個接收緩沖區不能保證收到的UDP報的順序和發送UDP報的順序一致; 如果 緩沖區滿了, 再到達的UDP數據就會被丟棄

UDP的socket既能讀, 也能寫, 這個概念叫做 全雙工

UDP使用注意事項

  1. , UDP協議首部中有一個16位的大長度. 也就是說一個UDP能傳輸的數據大長度是64K(包含UDP首 部).
  2. 64K在當今的互聯網環境下, 是一個非常小的數字. 如果我們需要傳輸的數據超過64K, 就需要在應用層手動的分包, 多次發送, 并在接收端手動拼裝;

基于UDP的應用層協議

  1. NFS: 網絡文件系統
  2. TFTP: 簡單文件傳輸協議
  3. DHCP: 動態主機配置協議
  4. BOOTP: 啟動協議(用于無盤設備啟動)
  5. DNS: 域名解析協議
  6. 。。。。。。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383194.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383194.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383194.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

中文rfc文檔路徑

http://man.chinaunix.net/develop/rfc/default.htm

網絡基礎2-3(TCP協議,三次握手,四次揮手,TIME_WAIT狀態的作用,TCP如何保證可靠傳輸,TCP連接中狀態轉化,滑動窗口,流量控制,快速重傳,擁塞窗口,延遲應答,捎帶應答,粘包問題)

TCP協議 TCP協議概念 TCP全稱為 “傳輸控制協議(Transmission Control Protocol”). 人如其名, 要對數據的傳輸進行一個詳細的控制 TCP協議格式 1. 源/目的端口號: 表示數據是從哪個進程來, 到哪個進程去; 2. 32位序號/32位確認號: 后面詳細講; 3. 4位TCP報頭長度: 表示該…

超時設置

//read操作加上超時時間。1 int read_timeout(int fd, void *buf, uint32_t count, int time)2 {3 if(time > 0) {4 fd_set rSet;5 FD_ZERO(&rSet);6 FD_SET(fd, &rSet);7 8 struct timeval timeout;9 memset(&tim…

字符串題目 1 --------判斷兩個字符串是否為旋轉詞

題目描述 如果一個字符串為str,把字符串的前面任意部分挪到后面形成的字符串交str的旋轉詞。比如str“12345”,str的旋轉串有“12345”、“45123”等等。給定兩個字符串,判斷是否為旋轉詞。 輸入描述: 輸出包含三行,第一個兩個…

2021-03-04

為什么nginx轉發后端默認使用1.0而不是1.1 在 Nginx 的官網文檔中,有這樣一個指令: Syntax: gzip_http_version 1.0 | 1.1; Default: gzip_http_version 1.1; Context: http, server, location Sets the minimum HTTP version of a request required to…

字符串題目---2判斷兩個字符串是否為變形詞

題目描述 給定兩個字符串str1和str2,如果str1和str2中出現的字符種類出現的一樣且每種字符出現的次數也一樣,那么str1和str2互為變形詞。請判斷str1和str2是否為變形詞 輸入描述: 輸入包括3行,第一行包含兩個整數n,m(1 \leq n,…

設計模式7----代理模式

代理模式 概念 Proxy 模式又叫做代理模式,是結構型的設計模式之一,它可以為其他對象提供一 種代理(Proxy)以控制對這個對象的訪問。 所謂代理,是指具有與代理元(被代理的對象)具有相同的接口的…

網絡基礎3-1(細談IP協議頭, 網絡層,子網劃分,路由選擇,數據鏈路層,以太網幀格式,MAC地址,再談ARP協議)

IP協議 IP協議頭格式 4位版本號(version): 指定IP協議的版本, 對于IPv4來說, 就是44位頭部長度(header length): IP頭部的長度是多少個。32bit, 也就是 length * 4 的字節數. 4bit表示大 的數字是15, 因此IP頭部大長度是60字節8位服務類型(Type Of Service): 3位優先權字段(已…

c++常見并且必須記住的問題

一、基礎知識 基本語言 1、說一下static關鍵字的作用 ?2、說一下C和C的區別 3、說一說c中四種cast轉換 4、請說一下C/C 中指針和引用的區別? 5、給定三角形ABC和一點P(x,y,z),判斷點P是否在ABC內,給出思路并手寫代碼 6、怎么判斷一個…

網絡中典型協議--(DNS,輸入url后, 發生的事情. ,ICMP,NAT)

DNS(Domain Name System) DNS是一整套從域名映射到IP的系統 域名服務器發展背景 TCP/IP中使用IP地址和端口號來確定網絡上的一臺主機的一個程序. 但是IP地址不方便記憶. 于是人們發明了一種叫主機名的東西, 是一個字符串, 并且使用hosts文件來描述主機…

高級IO--1 ---(五種典型IO,阻塞IO,非阻塞IO,信號驅動IO,異步IO, IO多路轉接)

高級IO: 五種典型IO: 阻塞IO/非阻塞IO/信號驅動IO/異步IO/IO多路轉接 IO多路轉接模型:select/poll/epoll 五種典型IO 阻塞IO IO操作的流程:等待IO操作條件具備,然后進行數據拷貝 為了完成IO操作發起調用&#xff…

IO多路轉接模型----(select的模型,select的優缺點,poll的模型,poll的優缺點)

IO多路轉接模型:select/poll/epoll 對大量描述符進行事件監控(可讀/可寫/異常) select模型 用戶定義描述符的事件監控集合 fd_set(這是一個位圖,用于存儲要監控的描述符); 用戶將需要監控的描述符添加到集合中,這個描…

IO多路轉接模型-----epoll

epoll: Linux下性能最高的多路轉接模型 epoll 有3個相關的系統調用. epoll_create 功能:創建epoll,在內核中創建eventpoll結構體,size決定了epoll最多監控多少個描述符,在Linux2.6.8之后被忽略,但是必須…

再寫順序表(c語言實現,外加冒泡排序,二分查找)

概念 順序表是用一段物理地址連續的存儲單元依次存儲數據元素的線性結構,一般情況下采用數組存儲。在數組 上完成數據的增刪查改。 順序表一般可以分為: 靜態順序表:使用定長數組存儲。動態順序表:使用動態開辟的數組存儲。 頭…

再寫單鏈表(不帶頭單鏈表)

單鏈表 實際中鏈表的結構非常多樣,以下情況組合起來就有8種鏈表結構: 單向、雙向帶頭、不帶頭循環、非循環 雖然有這么多的鏈表的結構,但是我們實際中最常用還是兩種結構: 無頭單向非循環鏈表:結構簡單&#xff0…

再寫雙向循環鏈表

#pragma once #include<assert.h> #include<malloc.h> #include<stdio.h> typedef int DLDataType;//定義鏈表結點結構 typedef struct DListNode{DLDataType value;struct DListNode *prev; //指向前一個結點struct DListNode *next; //指向后一個結點 } DL…

鏈表題目--1 刪除鏈表中所有等于val的值

注意事項 要刪除的結點相鄰第一個結點就是要刪除的結點 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* removeElements(struct ListNode* head, int val){if(headNULL){return NULL;}struct …

鏈表題目--2 求鏈表的中間結點 和 求鏈表中倒數第k個結點

求鏈表的中間結點 思路 一個走兩步&#xff0c;一個走一步。一個走到尾&#xff0c;另外一個就走到了中間 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* middleNode(struct ListNode* head…

鏈表題目---3 合并兩個有序單鏈表 和 分割鏈表

合并兩個有序單鏈表 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){if(l1 NULL){return l2;}else if(l2 NULL){return l1;}struc…

鏈表題目---4 刪除鏈表中重復的結點 和 判斷鏈表是否為回文鏈表

刪除鏈表中重復的結點 /* struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {} }; */ class Solution { public:ListNode* deleteDuplication(ListNode* pHead){if(pHead NULL){return NULL;}ListNode *prev NULL; //用于刪除的結點, 是…