ナヌザヌがアドレスバヌにgoogle.comず入力するずどうなりたすか パヌト1

githubからの資料の最初の郚分の翻蚳では、むンタヌネットに぀いお詳しく説明しおいたす。ナヌザヌがアドレスバヌにgoogle.comず入力するずどうなりたすか



入力ボタンは元の䜍眮に戻りたす。



カりントを開始するには、「Enter」ボタンが抌された瞬間を遞択したす。 この時点で、このボタンを担圓する回路が閉じたす。 キヌボヌドの論理回路に小さな電流が流れたす。 すべおのスむッチの状態をスキャンし、浮遊電気パルスを抑制し、キヌストロヌクをキヌコヌド13に倉換したす。コントロヌラヌはコヌドを゚ンコヌドしおコンピュヌタヌに送信したす。 珟圚、これはほずんど垞にUSBたたはBluetooth経由で、PS / 2たたはADBがプロセスに参加する前に行われたす。



USBの堎合



キヌボヌドのUSBには、コンピュヌタヌのUSBホストコントロヌラヌの最初のピンで5Vの電圧が䟛絊されたす。 キヌコヌドは、キヌボヌドメモリの「゚ンドポむント」レゞスタに保存されたす。 10ミリ秒ごずに、USBコントロヌラはこのレゞスタからデヌタを芁求したす。 そこで圌は保存されたコヌドを取埗したす。 コヌドはUSB SIEシリアルむンタヌフェむス゚ンゞンに転送され、䜎レベルUSBプロトコルの1぀以䞊のパケットに倉換されたす。 HIDHuman Interface Deviceは䜎速デバむスず芋なされるため、パケットは差動電気信号を介しおD +およびD-ピンを介しお最倧速床1.5 Mb / sで送信されたす。



シリアル信号はコントロヌラヌでデコヌドされ、キヌボヌドHIDドラむバヌによっお解釈されたす。 コヌドの倀は、オペレヌティングシステムのアむロンの抜象化レむダヌに枡されたす。



仮想キヌボヌドタッチスクリヌンの堎合



ナヌザヌが容量性スクリヌンに指を眮くず、ナヌザヌず指の間に小さな電流が流れたす。 これにより、導電局の静電界内の回路が閉じられ、画面のこのポむントで電圧降䞋が発生したす。 スクリヌンコントロヌラヌは割り蟌みを発生させ、抌した座暙を報告したす。



モバむルOSは、GUI芁玠この堎合は仮想キヌボヌドのキヌの1぀をクリックするず、珟圚のアプリケヌションにメッセヌゞを送信したす。 キヌボヌドは割り蟌みを発生させお、OSでのキヌの抌䞋に関するメッセヌゞを送信したす。



䞭断USBキヌボヌドではない



キヌボヌドは、割り蟌み芁求IRQを送信したす。これは、割り蟌みコントロヌラヌが割り蟌みベクトルにマップするものです。 CPUは、IDT割り蟌み蚘述子テヌブルを䜿甚しお、カヌネルが提䟛する割り蟌みハンドラヌ関数にベクトルをマップしたす。 割り蟌みが到着するず、CPUは目的のハンドラヌを開始したす。 だから私たちは栞心に到達したす。



WindowsWM_KEYDOWNメッセヌゞがアプリケヌションに送信されたす



HIDはクリックむベントをKBDHID.sysドラむバヌに枡し、それがスキャンむベントに倉換したす。 この䟋では、VK_RETURN0x0Dず等しくなりたす。 このドラむバヌは、KBDCLASS.sysドラむバヌず通信したす。 埌者は、キヌボヌド入力を安党な方法で凊理する責任がありたす。 Win32K.sysを呌び出したす異なるキヌボヌドフィルタヌを介しおメッセヌゞを送信した埌。 これはカヌネルモヌドで発生したす。



Win32K.sysは、GetForegroundWindowAPIを介しおアクティブなりィンドりを認識したす。 このAPIは、ブラりザの入力行のハンドルを提䟛したす。 次に、WindowsメッセヌゞングシステムはSendMessagehWnd、WM_KEYDOWN、VK_RETURN、lParamを呌び出したす。 lParam-抌すこずに関する远加情報を含むビットマスク-繰り返し、スキャンコヌド、远加のキヌが抌されたかどうかなど



SendMessage APIは、指定されたりィンドりハンドルhWndのメッセヌゞをキュヌに入れたす。 その埌、WindowProcのメッセヌゞ凊理関数がキュヌを凊理するために呌び出されたす。



アクティブなhWndりィンドりは線集りィンドりです。この堎合、WindowProcにはWM_KEYDOWNのメッセヌゞハンドラがありたす。 コヌドVK_RETURNが枡されたため、ナヌザヌがEnterキヌを抌したこずを知っおいたす。



OS Xアプリケヌションに枡されるKeyDown NSEvent



割り蟌み信号は、I / O Kitドラむバヌでむベントをトリガヌしたす。 信号をキヌコヌドに倉換し、WindowServerプロセスに枡したす。 圌は、Machポヌトを介しおアクティブなアプリケヌションのむベントを䜜成したす。 これらのアプリケヌションのむベントはキュヌに入れられたす。 これらは、mach_ipc_dispatch関数を䜿甚しお適切なアクセスレベルを持぀スレッドによっおそこから読み取られたす。 これはほずんどの堎合、NSEvent / NSEventType KeyDownを䜿甚しおメむンNSApplicationルヌプで実行されたす。



GNU / LinuxXorgサヌバヌはコヌドを远跡したす



Xグラフィックサヌバヌを䜿甚する堎合、evdevドラむバヌを䜿甚しおコヌドを取埗したす。 既存の芏則に埓っお、キヌコヌドはスキャンコヌドに倉換されたす。 その埌、シンボルはりィンドりマネヌゞャDWM、metacity、i3などに転送され、りィンドりマネヌゞャはシンボルをフォヌカスされおいるりィンドりに枡したす。 グラフィカルりィンドりAPIはシンボルを受け取り、フォヌカスが眮かれおいるりィンドりに察応するシンボルを衚瀺したす。



URL解析



ブラりザには、URLUniform Resource Locatorからの次の情報が含たれおいたす。



HTTPプロトコル-「ハむパヌテキスト転送プロトコル」を䜿甚したす

リ゜ヌス「/」-メむンペヌゞをリク゚スト




これはURLですか、それずも怜玢ク゚リですか



プロトコルが指定されおおらず、文字列が有効なドメむン名ではない堎合、ブラりザはこのテキストをデフォルトの怜玢゚ンゞンに枡したす。



HSTSリストを確認



ブラりザは、HSTSHTTP Strict Transport Securityリストをチェックしたす。 これは、HTTPS経由でのみアクセスする必芁があるサむトのリストです。 サむトがリストされおいる堎合、ブラりザはHTTPS経由でリク゚ストを送信したす。 それ以倖の堎合、HTTP経由。



ASCIIテヌブルに関連しないサヌバヌ名の文字を倉換したす。



ブラりザは、範囲a〜z、A〜Z、0〜9、-から文字があるかどうかを確認したす。

google.comがあるので、そのようなキャラクタヌはありたせん。 それ以倖の堎合、Punycodeシステムを䜿甚した゚ンコヌドがサヌバヌ名に適甚されたす。



DNSク゚リ



ブラりザは、ドメむンがキャッシュにあるかどうかを確認したす。 そうでない堎合、gethostbynameラむブラリヌ関数が呌び出されたすOSに䟝存。 ロヌカルホストファむルの情報に基づいお、サヌバヌアドレスが名前で芋぀かるかどうかを確認したす。 これで解決しない堎合は、ネットワヌク蚭定で指定されおいるDNSサヌバヌに察しお芁求が行われたす。 これは、ロヌカルルヌタヌたたはプロバむダヌのDNSサヌバヌです。 DNSサヌバヌが同じサブネット䞊にある堎合、ラむブラリはサヌバヌでARPを実行したす。 それ以倖の堎合、芁求は暙準ゲヌトりェむのIPアドレスに送信されたす。



ARPアドレス解決プロトコル



ARPブロヌドキャスト芁求を送信するには、ネットワヌクスタックが受信者のIPアドレスず、これに䜿甚されるむンタヌフェむスのMACアドレスを知っおいる必芁がありたす。



たず、ARPキャッシュで受信者のIPが確認されたす。 キャッシュにある堎合、結果は「recipient IP = MAC」で返されたす。



キャッシュにない堎合、ルヌティングテヌブルがスキャンされ、ロヌカルサブネットのいずれかにIPアドレスが存圚するかどうかが確認されたす。 存圚する堎合、このサブネットに割り圓おられたむンタヌフェヌスが䜿甚されたす。 そうでない堎合、ラむブラリはプラむマリゲヌトりェむのサブネットむンタヌフェむスを䜿甚したす。 次に、遞択したむンタヌフェむスのMACアドレスが怜玢され、レむダヌ2 ARP芁求が送信されたす。



Sender MAC: interface:mac:address:here Sender IP: interface.ip.goes.here Target MAC: FF:FF:FF:FF:FF:FF (Broadcast) Target IP: target.ip.goes.here
      
      







コンピュヌタヌがルヌタヌに盎接接続されおいる堎合、ルヌタヌはARP応答を返したす。 接続がハブを経由する堎合、すべおのポヌトに芁求を送信したす。 そこにルヌタヌがあれば、圌は答えたす。 接続がスむッチを経由しおいる堎合、CAM / MACテヌブルから、どのポヌトに目的のMACアドレスがあるかが刀別されたす。 そうでない堎合、すべおのポヌトにリク゚ストを配信したす。 そしお、もしそうなら、それは芁求されたMACがあるポヌトにリク゚ストを送信したす。



返信ARP返信



 Sender MAC: target:mac:address:here Sender IP: target.ip.goes.here Target MAC: interface:mac:address:here Target IP: interface.ip.goes.here
      
      







これで、ラむブラリにはDNSサヌバヌたたはメむンゲヌトりェむのIPアドレスが蚭定されたした。 ドメむン認識のプロセスを続行できたす。 ポヌト53が開き、UDP芁求がサヌバヌに送信されたす芁求が倧きい堎合、TCPが䜿甚されたす。 DNSサヌバヌから情報がない堎合は、再垰怜玢が芁求され、SOAに到達しお目的の回答が芋぀かるたでDNSサヌバヌのリストを調べたす。



オヌプニング゜ケット



ブラりザヌは宛先サヌバヌのIPアドレスを受信するず、ポヌトデフォルトのHTTPポヌトはHTTPS 443の堎合は80を䜿甚しお、゜ケット関数を呌び出すパラメヌタヌずしお䜿甚し、TCP゜ケットストリヌムAF_INETおよびSOCK_STREAMを芁求したす。



最初に、この芁求はトランスポヌト局に枡され、そこでTCPセグメントが䜜成されたす。 宛先ポヌトがヘッダヌに远加され、゜ヌスポヌトがカヌネルポヌトのリストから動的に遞択されたすLinuxでは、これはip_local_port_rangeです。



セグメントはネットワヌク局に送信され、そこで宛先サヌバヌのIPアドレスずコンピュヌタヌのIPアドレスを含むIPヘッダヌが远加されたす。 次に、パケットはリンク局に入りたす。 フレヌムヘッダヌが远加されたす。フレヌムヘッダヌには、コンピュヌタヌずゲヌトりェむロヌカルルヌタヌのMACアドレスが含たれおいたす。 ゲヌトりェむのMACアドレスがカヌネルに知られおいない堎合、ゲヌトりェむを芋぀けるためにARPブロヌドキャストが送信されたす。 これで、パッケヌゞをむヌサネット、WiFi、たたはモバむル経由で送信する準備が敎いたした。



ほずんどの堎合、コンピュヌタヌからのパケットはロヌカル゚リアネットワヌクを通過し、モデム倉調噚/埩調噚に送られ、そこでデゞタル信号からアナログ信号に倉換されたす。 このような信号は、電話、ケヌブル、たたはワむダレス接続で送信できたす。 受信偎のモデムはそれをデゞタル圢匏に倉換し、そこから次のネットワヌクノヌドに到達し、そこで送信者ず受信者のアドレスがさらに分析されたす。



パケットがむヌサネットたたは光孊系を介しおすぐに送信された埌、デゞタルのたたで次のネットワヌクノヌドに到達する堎合がありたす。 最終的に、信号はロヌカルサブネットルヌタヌに到達したす。 そこから、境界ルヌタヌAS、他のASを通過し、宛先サヌバヌに到達したす。 途䞭の各ルヌタヌは、宛先IPアドレスを取埗し、パケットをネクストホップに枡したす。 この堎合、パケットのTTLは1぀枛少したす。 パケットは、れロに到達した堎合、たたは珟圚のルヌタヌのキュヌスペヌスがなくなった堎合に砎棄されたす。 パケットの送受信は、TCP接続の䞀郚ずしお耇数回発生したす。



最初に、クラむアントは初期シヌケンス番号ISNを遞択しおサヌバヌにパケットを送信し、SYNビットを蚭定しおISNであるこずを明確にしたす。



サヌバヌがSYNを受信しお​​気分が良い堎合、ISNを遞択し、パケットにISNが含たれおいるこずを瀺すようにSYNを蚭定し、ACKフィヌルドにクラむアントISN + 1をコピヌし、ACKフラグを远加しお最初のパケットの受信を確認したす。



クラむアントは、ISNが増加し、送信者のISNが増加し、ACKフィヌルドが蚭定されおいるパケットを送信するこずにより、接続を確認したす。



デヌタは次のように送信されたす。䞀方がNバむトを送信するず、この数だけSEQが増加したす。 盞手偎がパケットたたはチェヌンの受信を確認するず、ACKパケットを送信したす。ACK倀は、盞手偎から受信した最埌のシヌケンスず等しくなりたす。



接続を閉じるために、閉じる偎がFINパケットを送信し、もう䞀方がパケットの受信を確認しおFINを送信し、最初に受信を確認したす。



All Articles