天天看點

計網複習

​​http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html​​

現在廣泛應用的,是TCP/IP體系中的五層結構。對應的就是OSI體系的七層結構。

那麼,五層結構,也就是分為:

實體層 -- 資料鍊路層 -- 網絡層 -- 傳輸層 -- 應用層

怎麼記呢?從了解上記

比如我現在需要從  廣州 -- 洛杉矶  怎麼做

1、實體層  (網線)

計算機要通信,肯定要連接配接在一起,現在計算機的通信都是通過光纜來連接配接的,和外國的,也是通過海底光纜來連接配接的。是以實體層要解決的就是,連結,然後0101010101010101010發送資訊

2、資料鍊路層 (把1010100101分組 && 擁有了MAC,區域網路廣播通信)

但是這樣不能識别,肯定要按照規定的分組來識别,比如8個一組等等。同時,多台計算機連接配接在一起形成一個子網,确實可以通訊了,但是我發給你,也需要有你的位址。是以,資料鍊路層就解決了這個問題。把資料變成   MAC位址 + 資料的格式,然後通過廣播的方式,廣播就是在你的區域網路中發出去,每個人都可以看到,但是如果比較和自己的MAC不對應,就不接收。

3、網絡層 (IP協定,廣域網通信, 引進路由)

現在是可以通訊了,但是按照上面的方式,每次發送資料都用廣播的方式,是不行的。世界上太多機器了,不能這樣。不同網段的,就不能用廣播的方式來傳遞了。不然會窘機

是以,必須找到一種方法,能夠區分哪些MAC位址屬于同一個子網絡,哪些不是。如果是同一個子網絡,就采用廣播方式發送,否則就采用"路由"方式發送。

遺憾的是,MAC位址本身無法做到這一點。它隻與廠商有關,與所處網絡無關。

這就導緻了"網絡層"的誕生。它的作用是引進一套新的位址,使得我們能夠區分不同的計算機是否屬于同一個子網絡。這套位址就叫做"網絡位址",簡稱"網址"。

是以,有了IP協定,在廣域網通訊的時候,如果同一區域網路的可以用MAC位址這樣廣播方式搜查,如果不同區域網路的,就不知道對方的MAC位址。那麼就發送給自己的網關,網關會識别然後發送去其他網段的了。

是以:分兩類情況

3.1  如果同一區域網路,那麼發送   對方MAC  對方IP

3.2 如果不同區域網路,那麼發送   網關MAC  對方IP

4、傳輸層 (各種應用監聽的端口不同,加入端口,似的發送更加明确)

現在真的真的可以通訊了,但是我們那麼多應用,可以一邊聊天,一邊上網。怎麼區分是誰的?是以,加入端口這個概念。即可區分。

"傳輸層"的功能,就是建立"端口到端口"的通信。相比之下,"網絡層"的功能是建立"主機到主機"的通信。隻要确定主機和端口,我們就能實作程式之間的交流。是以,Unix系統就把主機+端口,叫做"套接字"(socket)。有了它,就可以進行網絡應用程式開發了。

這裡有了TCP 、、、UDP協定,她們的頭部都加上了端口這個東西即可

TCP資料包需要設定端口,接收方(Google)的HTTP端口預設是80,發送方(本機)的端口是一個随機生成的1024-65535之間的整數,假定為51775。

5、應用層 (解析拿到過來的東西)

即使TCP可以應用在stmp、http中,那麼還是需要有她們各自的格式來解讀。這就是應用層解決的東西

最後變成了這樣

計網複習

2020-08-06 20:47:04:

什麼是網卡?

網卡就是把數字信号轉換成光電信号的東西。這個是一個傳輸協定棧,所有東西都說的是傳輸方面的,比如實體層其實說的是東西怎麼在實體層傳播.

計網複習

網卡運作在CPU 

------------------------------

實體層

資料鍊路

struct ethhdr {
  unsigned char h_dest[ETH_LENGTH];
  unsigned char d_dest[ETH_LENGTH];
  unsigned short h_proto;
} s;      

網絡層

計網複習
struct iphdr {
  unsigned char version:4,
                hdrlen:4; // 雖然是4bit,可以表示15,但是機關要*4
  unsigned char tos; // 流媒體那些
  unsigned char totlen;
  unsigned short id;
  unsigned short flag:3,
                 offset:13;
  unsigned char ttl; // 網絡經過一層就會減1,預設64
  unsigned char proto; // tcp/udp
  unsigned short check_sum;

  unsigned int s_ip;
  unsigned int d_ip;
} c;      

傳輸層(UDP/TCP)

什麼是端口: 傳輸層那邊定義的一個字段,叫端口

struct udphdr {
  unsigned short s_port;
  unsigned short d_port;
  unsigned short length;
  unsigned short check_sum;
};      

// TCP詳解

1. 三次握手發生在函數的哪裡呢?

用戶端: connect

伺服器: listen()和accept()這兩個函數之間,由系統的tcp協定棧實作的.

第一個SYN過來後, 有一個syn隊列...

收完之後,假如accept隊列。變成一個TCB(使用五元組唯一确定)..

2. 調用send的過程: 從使用者态發去核心态,然後核心态又是用協定棧發去網卡的.

TCP是怎麼保證順序的? 網絡上是無序的,通過延遲ack

計網複習

3. tcp如何确定發多少個包

計網複習
計網複習
計網複習

NAT:

1。完全錐形nat:我要去808找晶晶,假如真的存在,就可以進去

2.   ip限制錐形nat:隻允許固定的IP放問資料進來。

3.   端口限制錐形nat:ip+端口

4.    對稱nat: 錐形nat都是用戶端:網關:伺服器 = 1:1:N,但是對稱nat就是1:N:N\\

Q1:如何判斷網關nat類型

繼續閱讀