詳解網絡編程的埠和套接字

2020-12-23 米粒教育

當網絡中的兩臺計算機進行通信時,除了確定計算機在網絡中的IP位址外,還需要確定計算機中的一個埠,埠並不是實際的物理設備,它是一個應用程式,這個應用程式來負責兩臺計算機的通信。

一個IP位址標識了一臺主機(伺服器),主機可以提供多種服務,如web服務、ftp服務、遠程桌面等。主機的每個服務都會等待客戶端的連接,客戶端如何區別這些服務呢?這就需要埠來區分了。

埠被規定為一個在0~65535之間的整數,這個整數和提供服務的應用程式關聯。如web服務一般是80埠,ftp服務一般是21埠、遠程桌面一般是3389埠。

當我們通過客戶端瀏覽器訪問一個網站時,在瀏覽器地址欄中輸入該網站的網址,並不需要輸入80埠號。這是因為web服務默認就是80埠號,當客戶端以http協議訪問主機時,主機會默認這是訪問web服務。

在同一臺計算機上埠號不能重複,否則,就會產生埠號衝突。程式設計師或計算機管理員在分配埠號時,需要遵循下面的規則:

(1)1~1023之間的埠號,是由ICANN來管理的,不能分配給用戶自己的應用程式;

(3)1024~5000一般被TCP/IP程序作為臨時埠號使用;

(4)分配的埠號不能發生衝突;

(4)應分配數值大於5000的埠號給用戶開發的應用程式。

TCP用主機的IP位址加上主機上的埠號作為TCP連接的端點,這種端點就叫做套接字(socket)或插口。套接字用(IP位址:埠號)表示,區分不同應用程式進程間的網絡通信和連接,套接字主要有3個參數:通信的目的IP位址、使用的傳輸層協議(TCP或UDP)和使用的埠號。

TCP使用套接字傳輸數據

在Java語言中,使用Socket類來創建套接字,使用Socket類在兩臺計算機之間進行通信時,是有主次之分的,一個稱為伺服器程序,一個稱為客戶端程序。在伺服器端使用ServerSocket類創建套接字,主要是監聽指定的埠,等待客戶端的連接;在客戶端使用Socket類創建套接字,用於連接伺服器端的套接字。伺服器端和客戶端的套接字的IP位址和埠號要一致。

客戶端和服務端通信過程

在伺服器端創建ServerSocket對象,並綁定監聽埠。調用ServerSocket對象的accept()方法監聽客戶端的請求。與客戶端建立連接後,它會返回一個已連接的Socket對象,並通過輸入流讀取客戶端發送的請求信息,然後通過輸出流向客戶端發送響應信息,最後關閉socket及相關資源。

在客戶端創建Socket對象,需要指定連接伺服器的地址和埠號,和伺服器建立連接後,通過輸出流向服務端發送請求信息,然後通過輸入流獲取伺服器的響應信息,最後關閉socket及相關資源。

相關焦點

  • JAVA高並發網絡編程之BIO堵塞網絡編程
    上次說了網絡編程都是有作業系統統一的API的,每個語言有對它的實現,這次來一起說說通過java原生的socket編程完成BIO的網絡編程。
  • Socket網絡編程核心API深入分析(一):bind函數
    #include <arpa/inet.h>#include <sys/socket.h>#include <netinet/in.h>int main(){//創建套接字
  • 一個埠號可以同時被兩個進程綁定嗎?
    tcp.c該程序僅僅創建tcp套接字並綁定埠號8888,沒有accept建立連接操作,並且sleep(1000),讓進程不要太快退出。二、埠號的一些其他知識點1. 埠號的作用埠號可以用來標識同一個主機上通信的不同應用程式,埠號+IP位址就可以組成一個套接字,用來標識一個進程。2.
  • 軟體定義、硬體加速的可編程InfiniBand NDR網絡 賦能E級AI和HPC平臺
    在2020年全球數字超算大會(SC20大會)上,NVIDIA宣布推出NVIDIA® Mellanox® 400G InfiniBand產品,這是全球第一代400Gb/s網速的端到端網絡解決方案,可為全球的AI和HPC用戶提供最快的網絡互連性能,同時將計算、可編程性和軟體定義三種技術成功地融於一體
  • 軟體定義、硬體加速的可編程InfiniBand NDR網絡賦能E級AI和HPC平臺
    通信世界網消息(CWW)在2020年全球數字超算大會(SC20大會)上,NVIDIA宣布推出NVIDIA® Mellanox® 400G InfiniBand產品,這是全球第一代400Gb/s網速的端到端網絡解決方案,可為全球的AI和HPC用戶提供最快的網絡互連性能,同時將計算、可編程性和軟體定義三種技術成功地融於一體
  • 如何正確地創建和銷毀軟體應用系統中網絡通訊中的Socket對象實例
    Protocol網間協議)TCP/IP是目前Internet網絡中的主要協議,它定義了計算機和外設進行通信所使用的規則;TCP/IP網絡參考模型包括五個層次:應用層、傳輸層、網絡層、鏈路層、物理層。(該服務也就是伺服器端相關程序所提供的功能),從而允許伺服器端程序在同一時間內能夠進行多個不同的網絡會話,因為不同的網絡會話都有對應的服務埠號,彼此相互區分。
  • 詳解:少兒編程學什麼?它和成人編程教育有何不同?
    幾年前,學好編程還只是多個省市的中高考的加分項,就算孩子不學,其他科目的成績優異,也不至於影響升學。但近年來,編程教育課程逐步由加分項升級為中高考必考科目。在近幾年的高考題中,都有編程的身影。即便有政策驅動和新教改加持,仍有不少家長存疑:孩子又不當程式設計師,沒必要學編程;編程那麼枯燥難懂,孩子玩心重肯定沒法靜下心來學……本文將詳解少兒編程學什麼,它與成人編程教育有何不同?少兒編程學習真的枯燥嗎?一、少兒編程學什麼?
  • GTC20 | 軟體定義、硬體加速的可編程InfiniBand NDR網絡賦能E級AI...
    在之前的2020年全球數字超算大會(SC20大會)上,NVIDIA宣布推出NVIDIA® Mellanox® 400G InfiniBand產品,這是全球第一代400Gb/s網速的端到端網絡解決方案,可為全球的AI和HPC用戶提供最快的網絡互連性能,同時將計算、可編程性和軟體定義三種技術成功地融於一體
  • 史上最全網絡埠號大全,網絡工程師必備!
    先來科普一波~一、埠概念在網絡技術中,埠(Port)大致有兩種意思:一是物理意義上的埠,比如,ADSL Modem、集線器、交換機、路由器用於連接其他網絡設備的接口,如RJ-45埠、SC如果你經常接觸網絡工程, 那麼以下這些常用協議和埠號請記住了,在工作中和面試中作用比較大,建議收藏!埠:0服務:Reserved說明:通常用於分析作業系統。
  • 網盾極風雲BGP:HTTP網絡傳輸協議
    網絡協議就是網絡中(包括網際網路)傳遞、管理信息的一些規範。如同人與人之間相互交流是需要遵循一定的規矩一樣,計算機之間的相互通信需要共同遵守一定的規則,這些規則就稱為網絡協議。沒有網絡協議的網際網路是混亂的,就和人類社會一樣。
  • java網絡編程系列之NIO編程
    NIO編程一直是Java知識體系中的一個重點。前幾年的時間面試的門檻是了解NIO,現在就不一樣了,最起碼也要精通NIO,因此學習javaNIO編程是非常有必要的。這篇文章就開始對NIO進行一個認識。本文參考了慕課網,特在此說明。一、認識NIO1、什麼是BIO?
  • 你不得不了解的網絡安全攻防第一步,埠掃描和漏洞掃描
    網絡安全所謂知己知彼,百戰不殆,網絡和信息系統是我們要保護的對象,我們要想快速了解它,就需要運用一些掃描工具。掃描工具是對網絡中設備和系統進行信息收集的重要工具,它可以完成大量重複性的工作,為使用者收集設備與系統相關的必要信息。對於黑客來講,掃描器是攻擊系統的得力幫手;對於與黑客對壘的管理員而言,掃描器同樣具備著自我檢查漏洞,提高信息安全的重要作用。
  • 每天進步一點點,網絡常用埠
    20/TCP,UDP FTP [Default Data] 文件傳輸協議 - 默認數據埠21/TCP,UDP FTP [Control] 文件傳輸協議 - 控制埠22/TCP,UDP SSH SSH(Secure Shell) - 遠程登錄協議,用於安全登錄文件傳輸(SCP,SFTP)及埠重新定向
  • Microsoft Surface Pro 7具有更強大的性能和更好的埠
    Microsoft Surface Pro 7:埠Microsoft Surface Pro 7最終獲得了包括USB-C埠的積分,儘管該計算機上的總體連接很少。除了USB-C以外,您還獲得了USB-A埠(適用於舊式外圍設備),耳機插孔,microSD卡插槽和用於連接的Surface連接埠。
  • 關於樂高編程的三款套裝
    wedo2.0wedo2.0的一盒套裝中包含一個主控,一個傾角傳感器、一個光學傳感器和一個馬達。由於單一主控只能配備了兩個埠,所以局限性比較大,結合簡單易懂的wedo2.0編程軟體,非常時候初學者使用,非常容易上手。
  • 埠和接口有什麼區別和聯繫嗎
    打開APP 埠和接口有什麼區別和聯繫嗎 發表於 2018-04-23 16:54:22   什麼是埠
  • 可編程光子學:集成光路產業的新機遇
    可編程PICs包括可調諧耦合器和一系列的波導網絡,可以在軟體中重新配置,以定義不同的功能和輸入和輸出埠之間的任意連結。現成的可編程PICs可以極大的縮短新光子產品的開發時間和部署成本,因為他們繞過了定製PIC的設計——製造周期。這些晶片實際上是由光子學、電子封裝和軟體等一整套技術組成的,其生產成本可能比ASPIC更低。
  • 默認的SSH埠為22,關於它的設計你了解多少?
    默認的SSH埠為22,這不是巧合,關於它的設計你了解多少?關於SSH埠默認設置為22創始人是Tatu Ylonen。1995年他開始編程SSH初始版本,當時telnet和FTP被廣泛使用流行使用,但是Tatu Ylonen想設計自己SSH來替換telnet(埠23)和ftp(埠21)。設計埠22是免費的,這是方便的埠之telnet和ftp使用,但是要如何獲得該埠號?當時,埠分配的基本過程相當簡單。網際網路規模較小,正好處於網際網路繁榮的初期。
  • 埠轉發什麼原理?WAN,LAN區別?私有IP和公有IP區別?
    對於我們網絡開發的人員來說,經常會用到TCP,UDP協議,但是通常情況下,是在區域網內的協議交互通信。可你們有想過嗎?如果是涉及到內網和外網的交互呢?也就是說區域網和公網是怎麼 交互呢?假設有兩臺主機A和B,他們分別處於不同的區域網下,他們的區域網IP都是192.168.1.2。在同一個時刻,他們都訪問百度伺服器,那作為百度伺服器是怎麼分別回復這兩臺主機的呢?
  • 「深度學習被可微分編程取代?」展望30年後的神經網絡和函數編程
    通過將圖像和單詞映射到相同的表示中,我們可以將圖像分類為計算機從未見過的類!表示和整數可以分別作為深度學習和函數式編程的基本構建塊。深度學習的主要描述,即流形(manifold)和表示(representation),其中心是神經網絡講數據彎曲成新的表示。幾何學,邏輯學,拓撲學和函數式編程之間已知的聯繫表明,表示和整數之間的聯繫可能具有根本性意義。