我不明白什么是套接字我學到了 TCP/IP 模型,層被放在另一個里面并發送到目的地我認為并糾正我如果我錯了是套接字是一個程式(有人說檔案)之間應用程式和傳輸層,當應用程式想要連接時,它會創建一個帶有埠和 IP 的套接字(我不知道這兩個屬于誰是我們的機器還是目標),并且該套接字基于這些埠創建資料報和IP 這是我的理解我知道這不是現實但我沒有找到任何視頻或課程解釋請糾正我
uj5u.com熱心網友回復:
“套接字”可能意味著兩個略有不同的東西:
- 這是 TCP 連接終止的地方。
- 對于常見的 BSD 樣式的套接字 API,任何傳輸層埠分配都是一個套接字。
套接字是應用程式和傳輸層之間的程式(有人說是檔案)
不是真的 - 套接字(主要)是一個傳輸層概念。您需要一個套接字來創建 TCP 連接或發送或接收 UDP 資料報。
不知道這兩個人是屬于誰的,是我們的機器還是目的地
套接字是(潛在的)TCP 連接的本地端或可用于發送或接收 UDP 資料報的東西。請注意,UDP 通常是無連接的,但套接字 API 將其視為面向連接的。
uj5u.com熱心網友回復:
套接字對于網路會話就像檔案句柄對于檔案系統會話一樣——也就是說,它是作業系統保存的關于您正在做什么的一組狀態資訊的識別符號,并且您的程式將該識別符號傳遞給各種函式呼叫作為作業系統快速查找執行您要求它執行的任務所需的狀態資訊的一種方式。
例如,檔案句柄表示作業系統內部保存的以下狀態資訊,以支持您對檔案的讀/寫/更新:
- 您打開的檔案的 inode
- 讀/寫位置在該檔案中的偏移量
- 檔案的讀/寫/追加模式
- 內部資料緩沖區有助于加快檔案的 I/O 操作
...您將檔案句柄傳遞給函式呼叫,以便作業系統可以查找相關的資料結構,否則作業系統將不知道例如將您傳遞給的資料放在哪里write()或fwrite()。
類似地,套接字表示有關網路任務的狀態資訊,包括:
- 網路任務是使用 TCP 還是 UDP
- 網路任務是使用 IPv4 還是 IPv6
- 網路任務應該使用阻塞 I/O 還是非阻塞 I/O
- 網路任務應該系結到哪個本地埠(如果有)
- 默認情況下,網路任務應發送到的遠程 IP 地址和埠(如果有)
- 用于存盤傳入資料的資料緩沖區,直到您開始呼叫
recv()以處理它 - 一個資料緩沖區,用于存盤傳出資料(在您呼叫之后
send()),直到網卡能夠物理發送它 - 對于 TCP,諸如當前連接狀態、MTU、傳輸視窗大小、下一個資料包序列 ID 等,以幫助管理重傳和流量控制
- 以及許多其他設定/選項
當您創建套接字時,作業系統分配內部記憶體來存盤狀態資訊,然后您關閉套接字,作業系統可以釋放分配的內部記憶體,因為它知道它不再需要它了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/345040.html
