diff --git a/notes/计算机网络.md b/notes/计算机网络.md index dfc31711..1ddc53a7 100644 --- a/notes/计算机网络.md +++ b/notes/计算机网络.md @@ -1,839 +1,934 @@ -* [µÚÒ»Õ ¸ÅÊö](#µÚÒ»ÕÂ-¸ÅÊö) - * [ÍøÂçµÄÍøÂç](#ÍøÂçµÄÍøÂç) +* [第一章 概述](#第一章-概述) + * [网络的网络](#网络的网络) * [ISP](#isp) - * [»¥ÁªÍøµÄ×é³É](#»¥ÁªÍøµÄ×é³É) - * [Ö÷»úÖ®¼äµÄͨÐÅ·½Ê½](#Ö÷»úÖ®¼äµÄͨÐÅ·½Ê½) - * [µç·½»»»Óë·Ö×é½»»»](#µç·½»»»Óë·Ö×é½»»») - * [1. µç·½»»»](#1-µç·½»»») - * [2. ±¨ÎĽ»»»](#2-±¨ÎĽ»»») - * [3. ·Ö×é½»»»](#3-·Ö×é½»»») - * [ʱÑÓ](#ʱÑÓ) - * [1. ·¢ËÍʱÑÓ](#1-·¢ËÍʱÑÓ) - * [2. ´«²¥Ê±ÑÓ](#2-´«²¥Ê±ÑÓ) - * [3. ´¦ÀíʱÑÓ](#3-´¦ÀíʱÑÓ) - * [4. ÅŶÓʱÑÓ](#4-ÅŶÓʱÑÓ) - * [¼ÆËã»úÍøÂçÌåϵ½á¹¹*](#¼ÆËã»úÍøÂçÌåϵ½á¹¹) - * [1. Æß²ãЭÒé](#1-Æß²ãЭÒé) - * [2. Îå²ãЭÒé](#2-Îå²ãЭÒé) - * [3. Êý¾ÝÔÚ¸÷²ãÖ®¼äµÄ´«µÝ¹ý³Ì](#3-Êý¾ÝÔÚ¸÷²ãÖ®¼äµÄ´«µÝ¹ý³Ì) - * [4. TCP/IP Ìåϵ½á¹¹](#4-tcpip-Ìåϵ½á¹¹) -* [µÚ¶þÕ ÎïÀí²ã](#µÚ¶þÕÂ-ÎïÀí²ã) - * [ͨÐÅ·½Ê½](#ͨÐÅ·½Ê½) - * [´øÍ¨µ÷ÖÆ](#´øÍ¨µ÷ÖÆ) - * [ÐŵÀ¸´Óü¼Êõ](#ÐŵÀ¸´Óü¼Êõ) - * [1. Ƶ·Ö¸´Óá¢Ê±·Ö¸´ÓÃ](#1-Ƶ·Ö¸´ÓÃʱ·Ö¸´ÓÃ) - * [2. ͳ¼ÆÊ±·Ö¸´ÓÃ](#2-ͳ¼ÆÊ±·Ö¸´ÓÃ) - * [3. ²¨·Ö¸´ÓÃ](#3-²¨·Ö¸´ÓÃ) - * [4. Âë·Ö¸´ÓÃ](#4-Âë·Ö¸´ÓÃ) -* [µÚÈýÕ Êý¾ÝÁ´Â·²ã](#µÚÈýÕÂ-Êý¾ÝÁ´Â·²ã) - * [Èý¸ö»ù±¾ÎÊÌâ](#Èý¸ö»ù±¾ÎÊÌâ) - * [1. ·â×°³ÉÖ¡](#1-·â×°³ÉÖ¡) - * [2. ͸Ã÷´«Êä](#2-͸Ã÷´«Êä) - * [3. ²î´í¼ì²â](#3-²î´í¼ì²â) - * [µã¶ÔµãÐŵÀ - PPP ЭÒé](#µã¶ÔµãÐŵÀ---ppp-ЭÒé) - * [¾ÖÓòÍøµÄÍØÆË](#¾ÖÓòÍøµÄÍØÆË) - * [¹ã²¥ÐŵÀ - CSMA/CD ЭÒé*](#¹ã²¥ÐŵÀ---csmacd-ЭÒé) - * [¼¯Ï߯÷](#¼¯Ï߯÷) - * [MAC ²ã](#mac-²ã) - * [ÐéÄâ¾ÖÓòÍø](#ÐéÄâ¾ÖÓòÍø) -* [µÚËÄÕÂ ÍøÂç²ã*](#µÚËÄÕÂ-ÍøÂç²ã) - * [Íø¼ÊЭÒé IP ¸ÅÊö](#Íø¼ÊЭÒé-ip-¸ÅÊö) - * [IP Êý¾Ý±¨¸ñʽ](#ip-Êý¾Ý±¨¸ñʽ) - * [IP µØÖ·±àÖ·](#ip-µØÖ·±àÖ·) - * [1. ·ÖÀà](#1-·ÖÀà) - * [2. ×ÓÍø»®·Ö](#2-×ÓÍø»®·Ö) - * [3. ÎÞ·ÖÀà](#3-ÎÞ·ÖÀà) - * [IP µØÖ·ºÍ MAC µØÖ·](#ip-µØÖ·ºÍ-mac-µØÖ·) - * [µØÖ·½âÎöЭÒé ARP](#µØÖ·½âÎöЭÒé-arp) - * [·ÓÉÆ÷µÄ½á¹¹](#·ÓÉÆ÷µÄ½á¹¹) - * [½»»»»úÓë·ÓÉÆ÷µÄÇø±ð](#½»»»»úÓë·ÓÉÆ÷µÄÇø±ð) - * [·ÓÉÆ÷·Ö×éת·¢Á÷³Ì](#·ÓÉÆ÷·Ö×éת·¢Á÷³Ì) - * [·ÓÉÑ¡ÔñЭÒé](#·ÓÉÑ¡ÔñЭÒé) - * [1. ÄÚ²¿Íø¹ØÐ­Òé RIP](#1-ÄÚ²¿Íø¹ØÐ­Òé-rip) - * [2. ÄÚ²¿Íø¹ØÐ­Òé OSPF](#2-ÄÚ²¿Íø¹ØÐ­Òé-ospf) - * [3. Íâ²¿Íø¹ØÐ­Òé BGP](#3-Íâ²¿Íø¹ØÐ­Òé-bgp) - * [Íø¼Ê¿ØÖƱ¨ÎÄЭÒé ICMP](#Íø¼Ê¿ØÖƱ¨ÎÄЭÒé-icmp) - * [·Ö×éÍø¼ä̽²â PING](#·Ö×éÍø¼ä̽²â-ping) - * [IP ¶à²¥](#ip-¶à²¥) - * [ÐéÄâרÓÃÍø VPN](#ÐéÄâרÓÃÍø-vpn) - * [ÍøÂçµØÖ·×ª»» NAT](#ÍøÂçµØÖ·×ª»»-nat) -* [µÚÎåÕ ÔËÊä²ã*](#µÚÎåÕÂ-ÔËÊä²ã) - * [UDP ºÍ TCP µÄÌØµã](#udp-ºÍ-tcp-µÄÌØµã) - * [UDP Êײ¿¸ñʽ](#udp-Êײ¿¸ñʽ) - * [TCP Êײ¿¸ñʽ](#tcp-Êײ¿¸ñʽ) - * [TCP µÄÈý´ÎÎÕÊÖ](#tcp-µÄÈý´ÎÎÕÊÖ) - * [TCP µÄËĴλÓÊÖ](#tcp-µÄËĴλÓÊÖ) - * [TCP »¬¶¯´°¿Ú](#tcp-»¬¶¯´°¿Ú) - * [TCP ¿É¿¿´«Êä](#tcp-¿É¿¿´«Êä) - * [TCP Á÷Á¿¿ØÖÆ](#tcp-Á÷Á¿¿ØÖÆ) - * [TCP ÓµÈû¿ØÖÆ](#tcp-ÓµÈû¿ØÖÆ) - * [Âý¿ªÊ¼ÓëÓµÈû±ÜÃâ](#Âý¿ªÊ¼ÓëÓµÈû±ÜÃâ) - * [¿ìÖØ´«Óë¿ì»Ö¸´](#¿ìÖØ´«Óë¿ì»Ö¸´) -* [µÚÁùÕ ӦÓòã*](#µÚÁùÕÂ-Ó¦Óòã) - * [ÓòÃûϵͳ DNS](#ÓòÃûϵͳ-dns) - * [1. ²ã´Î½á¹¹](#1-²ã´Î½á¹¹) - * [2. ½âÎö¹ý³Ì](#2-½âÎö¹ý³Ì) - * [Îļþ´«ÊäЭÒé FTP](#Îļþ´«ÊäЭÒé-ftp) - * [Ô¶³ÌÖÕ¶ËЭÒé TELNET](#Ô¶³ÌÖÕ¶ËЭÒé-telnet) - * [ÍòÎ¬Íø WWW](#ÍòÎ¬Íø-www) - * [µç×ÓÓʼþЭÒé](#µç×ÓÓʼþЭÒé) + * [互è�”网的组æˆ�](#互è�”网的组æˆ�) + * [主机之间的通信方å¼�](#主机之间的通信方å¼�) + * [电路交æ�¢ä¸Žåˆ†ç»„交æ�¢](#电路交æ�¢ä¸Žåˆ†ç»„交æ�¢) + * [1. 电路交æ�¢](#1-电路交æ�¢) + * [2. 报文交æ�¢](#2-报文交æ�¢) + * [3. 分组交æ�¢](#3-分组交æ�¢) + * [æ—¶å»¶](#æ—¶å»¶) + * [1. å�‘é€�æ—¶å»¶](#1-å�‘é€�æ—¶å»¶) + * [2. ä¼ æ’­æ—¶å»¶](#2-ä¼ æ’­æ—¶å»¶) + * [3. 处ç�†æ—¶å»¶](#3-处ç�†æ—¶å»¶) + * [4. 排队时延](#4-排队时延) + * [计算机网络体系结构*](#计算机网络体系结构) + * [1. 七层å��è®®](#1-七层å��è®®) + * [2. 五层å��è®®](#2-五层å��è®®) + * [3. æ•°æ�®åœ¨å�„层之间的传递过程](#3-æ•°æ�®åœ¨å�„层之间的传递过程) + * [4. TCP/IP 体系结构](#4-tcpip-体系结构) +* [第二章 物ç�†å±‚](#第二章-物ç�†å±‚) + * [通信方å¼�](#通信方å¼�) + * [带通调制](#带通调制) + * [ä¿¡é�“å¤�用技术](#ä¿¡é�“å¤�用技术) + * [1. 频分å¤�用ã€�时分å¤�用](#1-频分å¤�用时分å¤�用) + * [2. 统计时分å¤�用](#2-统计时分å¤�用) + * [3. 波分å¤�用](#3-波分å¤�用) + * [4. ç �分å¤�用](#4-ç �分å¤�用) +* [第三章 æ•°æ�®é“¾è·¯å±‚](#第三章-æ•°æ�®é“¾è·¯å±‚) + * [三个基本问题](#三个基本问题) + * [1. å°�装æˆ�帧](#1-å°�装æˆ�帧) + * [2. é€�明传输](#2-é€�明传输) + * [3. 差错检测](#3-差错检测) + * [点对点信é�“ - PPP å��è®®](#点对点信é�“---ppp-å��è®®) + * [局域网的拓扑](#局域网的拓扑) + * [广播信é�“ - CSMA/CD å��è®®*](#广播信é�“---csmacd-å��è®®) + * [集线器](#集线器) + * [MAC 层](#mac-层) + * [虚拟局域网](#虚拟局域网) +* [第四章 网络层*](#第四章-网络层) + * [网际å��è®® IP 概述](#网际å��è®®-ip-概述) + * [IP æ•°æ�®æŠ¥æ ¼å¼�](#ip-æ•°æ�®æŠ¥æ ¼å¼�) + * [IP 地å�€ç¼–å�€](#ip-地å�€ç¼–å�€) + * [1. 分类](#1-分类) + * [2. å­�网划分](#2-å­�网划分) + * [3. 无分类](#3-无分类) + * [IP 地å�€å’Œ MAC 地å�€](#ip-地å�€å’Œ-mac-地å�€) + * [地å�€è§£æž�å��è®® ARP](#地å�€è§£æž�å��è®®-arp) + * [路由器的结构](#路由器的结构) + * [交æ�¢æœºä¸Žè·¯ç”±å™¨çš„区别](#交æ�¢æœºä¸Žè·¯ç”±å™¨çš„区别) + * [路由器分组转å�‘æµ�程](#路由器分组转å�‘æµ�程) + * [路由选择å��è®®](#路由选择å��è®®) + * [1. 内部网关å��è®® RIP](#1-内部网关å��è®®-rip) + * [2. 内部网关å��è®® OSPF](#2-内部网关å��è®®-ospf) + * [3. 外部网关å��è®® BGP](#3-外部网关å��è®®-bgp) + * [网际控制报文å��è®® ICMP](#网际控制报文å��è®®-icmp) + * [分组网间探测 PING](#分组网间探测-ping) + * [IP 多播](#ip-多播) + * [虚拟专用网 VPN](#虚拟专用网-vpn) + * [网络地å�€è½¬æ�¢ NAT](#网络地å�€è½¬æ�¢-nat) +* [第五章 è¿�输层*](#第五章-è¿�输层) + * [UDP å’Œ TCP 的特点](#udp-å’Œ-tcp-的特点) + * [UDP 首部格å¼�](#udp-首部格å¼�) + * [TCP 首部格å¼�](#tcp-首部格å¼�) + * [TCP 的三次æ�¡æ‰‹](#tcp-的三次æ�¡æ‰‹) + * [TCP 的四次挥手](#tcp-的四次挥手) + * [TCP 滑动窗å�£](#tcp-滑动窗å�£) + * [TCP å�¯é� ä¼ è¾“](#tcp-å�¯é� ä¼ è¾“) + * [TCP æµ�é‡�控制](#tcp-æµ�é‡�控制) + * [TCP 拥塞控制](#tcp-拥塞控制) + * [慢开始与拥塞é�¿å…�](#慢开始与拥塞é�¿å…�) + * [å¿«é‡�传与快æ�¢å¤�](#å¿«é‡�传与快æ�¢å¤�) +* [第六章 应用层*](#第六章-应用层) + * [域å��系统 DNS](#域å��系统-dns) + * [1. 层次结构](#1-层次结构) + * [2. è§£æž�过程](#2-è§£æž�过程) + * [文件传输å��è®® FTP](#文件传输å��è®®-ftp) + * [远程终端å��è®® TELNET](#远程终端å��è®®-telnet) + * [万维网 WWW](#万维网-www) + * [电å­�邮件å��è®®](#电å­�邮件å��è®®) * [POP3](#pop3) * [IMAP](#imap) * [SMTP](#smtp) - * [¶¯Ì¬Ö÷»úÅäÖÃЭÒé DHCP](#¶¯Ì¬Ö÷»úÅäÖÃЭÒé-dhcp) - * [µã¶Ôµã´«Êä P2P](#µã¶Ôµã´«Êä-p2p) - * [Web Ò³ÃæÇëÇó¹ý³Ì](#web-Ò³ÃæÇëÇó¹ý³Ì) - * [³£Óö˿Ú](#³£Óö˿Ú) -* [²Î¿¼×ÊÁÏ](#²Î¿¼×ÊÁÏ) + * [动æ€�主机é…�ç½®å��è®® DHCP](#动æ€�主机é…�ç½®å��è®®-dhcp) + * [点对点传输 P2P](#点对点传输-p2p) + * [Web 页é�¢è¯·æ±‚过程](#web-页é�¢è¯·æ±‚过程) + * [常用端å�£](#常用端å�£) +* [å�‚考资料](#å�‚考资料) -# µÚÒ»Õ ¸ÅÊö +# 第一章 概述 -## ÍøÂçµÄÍøÂç +## 网络的网络 -ÍøÂç°ÑÖ÷»úÁ¬½ÓÆðÀ´£¬¶ø»¥ÁªÍøÊǰѶàÖÖ²»Í¬µÄÍøÂçÁ¬½ÓÆðÀ´£¬Òò´Ë»¥ÁªÍøÊÇÍøÂçµÄÍøÂç¡£ +网络把主机连接起æ�¥ï¼Œè€Œäº’è�”网是把多ç§�ä¸�å�Œçš„网络连接起æ�¥ï¼Œå› æ­¤äº’è�”网是网络的网络。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/04ff7ae6-7bee-4cf8-82f8-dfe2ba1f3616.jpg) ## ISP -»¥ÁªÍø·þÎñÌṩÉÌ ISP ¿ÉÒÔ´Ó»¥ÁªÍø¹ÜÀí»ú¹¹»ñµÃÐí¶à IP µØÖ·£¬Í¬Ê±ÓµÓÐͨÐÅÏß·ÒÔ¼°Â·ÓÉÆ÷µÈÁªÍøÉ豸£¬¸öÈË»ò»ú¹¹Ïò ISP ½ÉÄÉÒ»¶¨µÄ·ÑÓþͿÉÒÔ½ÓÈ뻥ÁªÍø¡£ +互è�”网æœ�务æ��供商 ISP å�¯ä»¥ä»Žäº’è�”网管ç�†æœºæž„获得许多 IP 地å�€ï¼Œå�Œæ—¶æ‹¥æœ‰é€šä¿¡çº¿è·¯ä»¥å�Šè·¯ç”±å™¨ç­‰è�”网设备,个人或机构å�‘ ISP 缴纳一定的费用就å�¯ä»¥æŽ¥å…¥äº’è�”网。 -ĿǰµÄ»¥ÁªÍøÊÇÒ»ÖÖ¶à²ã´Î ISP ½á¹¹£¬ISP ¸ù¾Ý¸²¸ÇÃæ»ýµÄ´óС·ÖΪÖ÷¸É ISP¡¢µØÇø ISP ºÍ±¾µØ ISP¡£ +ç›®å‰�的互è�”网是一ç§�多层次 ISP 结构,ISP æ ¹æ�®è¦†ç›–é�¢ç§¯çš„大å°�分为主干 ISPã€�地区 ISP 和本地 ISP。 -»¥ÁªÍø½»»»µã IXP ÔÊÐíÁ½¸ö ISP Ö±½ÓÏàÁ¬¶ø²»Óþ­¹ýµÚÈý¸ö ISP¡£ +互è�”网交æ�¢ç‚¹ IXP å…�许两个 ISP 直接相连而ä¸�用ç»�过第三个 ISP。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/17d807ef-03bf-4824-a97c-ea5fb58ec61d.jpg) -## »¥ÁªÍøµÄ×é³É +## 互è�”网的组æˆ� -1. ±ßÔµ²¿·Ö£ºËùÓÐÁ¬½ÓÔÚ»¥ÁªÍøÉϵÄÖ÷»ú£¬Óû§¿ÉÒÔÖ±½ÓʹÓã» -2. ºËÐIJ¿·Ö£ºÓÉ´óÁ¿µÄÍøÂçºÍÁ¬½ÓÕâÐ©ÍøÂçµÄ·ÓÉÆ÷×é³É£¬Îª±ßÔµ²¿·ÖµÄÖ÷»úÌṩ·þÎñ¡£ +1. 边缘部分:所有连接在互è�”网上的主机,用户å�¯ä»¥ç›´æŽ¥ä½¿ç”¨ï¼› +2. 核心部分:由大é‡�的网络和连接这些网络的路由器组æˆ�,为边缘部分的主机æ��ä¾›æœ�务。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/005d83c2-e64a-41f0-bbdd-51c71d494a18.jpg) -## Ö÷»úÖ®¼äµÄͨÐÅ·½Ê½ +## 主机之间的通信方å¼� -**1. ¿Í»§ - ·þÎñÆ÷£¨C/S£©** +**1. 客户 - æœ�务器(C/S)** -¿Í»§¼´ÊÇ·þÎñÇëÇó·½£¬·þÎñÆ÷ÊÇ·þÎñÌṩ·½¡£ +客户å�³æ˜¯æœ�务请求方,æœ�务器是æœ�务æ��供方。 -**2. ¶ÔµÈ£¨P2P£©** +**2. 对等(P2P)** -²»Çø·Ö¿Í»§ºÍ·þÎñÆ÷¡£ +ä¸�区分客户和æœ�务器。 -## µç·½»»»Óë·Ö×é½»»» +## 电路交æ�¢ä¸Žåˆ†ç»„交æ�¢ ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/b97958dd-3e43-45f7-97f5-3ec20f3f8b88.jpg) -### 1. µç·½»»» +### 1. 电路交æ�¢ -µç·½»»»ÓÃÓڵ绰ͨÐÅϵͳ£¬Á½¸öÓû§ÒªÍ¨ÐÅ֮ǰÐèÒª½¨Á¢Ò»ÌõרÓõÄÎïÀíÁ´Â·£¬²¢ÇÒÔÚÕû¸öͨÐŹý³ÌÖÐʼÖÕÕ¼ÓøÃÁ´Â·¡£ÓÉÓÚͨÐŵĹý³ÌÖв»¿ÉÄÜÒ»Ö±ÔÚʹÓô«ÊäÏß·£¬Òò´Ëµç·½»»»¶ÔÏß·µÄÀûÓÃÂʺܵͣ¬ÍùÍù²»µ½ 10%¡£ +电路交æ�¢ç”¨äºŽç”µè¯�通信系统,两个用户è¦�通信之å‰�需è¦�建立一æ�¡ä¸“用的物ç�†é“¾è·¯ï¼Œå¹¶ä¸”在整个通信过程中始终å� ç”¨è¯¥é“¾è·¯ã€‚由于通信的过程中ä¸�å�¯èƒ½ä¸€ç›´åœ¨ä½¿ç”¨ä¼ è¾“线路,因此电路交æ�¢å¯¹çº¿è·¯çš„利用率很低,往往ä¸�到 10%。 -### 2. ±¨ÎĽ»»» +### 2. 报文交æ�¢ -±¨ÎĽ»»»ÓÃÓÚÓʾÖͨÐÅϵͳ£¬ÓʾֽÓÊÕµ½Ò»·Ý±¨ÎÄÖ®ºó£¬ÏÈ´æ´¢ÏÂÀ´£¬È»ºó°ÑÏàͬĿµÄµØµÄ±¨ÎÄÒ»Æðת·¢µ½ÏÂÒ»¸öÄ¿µÄµØ£¬Õâ¸ö¹ý³Ì¾ÍÊǴ洢ת·¢¹ý³Ì¡£ +报文交æ�¢ç”¨äºŽé‚®å±€é€šä¿¡ç³»ç»Ÿï¼Œé‚®å±€æŽ¥æ”¶åˆ°ä¸€ä»½æŠ¥æ–‡ä¹‹å�Žï¼Œå…ˆå­˜å‚¨ä¸‹æ�¥ï¼Œç„¶å�ŽæŠŠç›¸å�Œç›®çš„地的报文一起转å�‘到下一个目的地,这个过程就是存储转å�‘过程。 -### 3. ·Ö×é½»»» +### 3. 分组交æ�¢ -·Ö×é½»»»Ò²Ê¹ÓÃÁ˴洢ת·¢£¬µ«ÊÇת·¢µÄÊÇ·Ö×é¶ø²»ÊDZ¨ÎÄ¡£°ÑÕû¿éÊý¾Ý³ÆÎªÒ»¸ö±¨ÎÄ£¬ÓÉÓÚÒ»¸ö±¨ÎÄ¿ÉÄܺܳ¤£¬ÐèÒªÏȽøÐÐÇз֣¬À´Âú×ã·Ö×éÄÜ´¦ÀíµÄ´óС¡£ÔÚÿ¸öÇзֵÄÊý¾ÝÇ°Ãæ¼ÓÉÏÊײ¿Ö®ºó¾Í³ÉΪÁË·Ö×飬Êײ¿°üº¬ÁËÄ¿µÄµØÖ·ºÍÔ´µØÖ·µÈ¿ØÖÆÐÅÏ¢¡£ +分组交æ�¢ä¹Ÿä½¿ç”¨äº†å­˜å‚¨è½¬å�‘,但是转å�‘的是分组而ä¸�是报文。把整å�—æ•°æ�®ç§°ä¸ºä¸€ä¸ªæŠ¥æ–‡ï¼Œç”±äºŽä¸€ä¸ªæŠ¥æ–‡å�¯èƒ½å¾ˆé•¿ï¼Œéœ€è¦�先进行切分,æ�¥æ»¡è¶³åˆ†ç»„能处ç�†çš„大å°�。在æ¯�个切分的数æ�®å‰�é�¢åŠ ä¸Šé¦–éƒ¨ä¹‹å�Žå°±æˆ�为了分组,首部包å�«äº†ç›®çš„地å�€å’Œæº�地å�€ç­‰æŽ§åˆ¶ä¿¡æ�¯ã€‚ ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/6f4af159-8b03-4246-8d0e-222db65bb83c.jpg) -´æ´¢×ª·¢ÔÊÐíÔÚÒ»Ìõ´«ÊäÏß·ÉÏ´«ËͶà¸öÖ÷»úµÄ·Ö×飬Òò´Ë²»ÐèÒªÕ¼Óö˵½¶ËµÄÏß·×ÊÔ´¡£ +存储转å�‘å…�许在一æ�¡ä¼ è¾“线路上传é€�多个主机的分组,因此ä¸�需è¦�å� ç”¨ç«¯åˆ°ç«¯çš„线路资æº�。 -Ïà±ÈÓÚ±¨ÎĽ»»»£¬ÓÉÓÚ·Ö×é±È±¨ÎĸüС£¬´æ´¢×ª·¢µÄËÙ¶ÈÒ²¾Í¸ü¿ì¡£ +相比于报文交æ�¢ï¼Œç”±äºŽåˆ†ç»„比报文更å°�,存储转å�‘的速度也就更快。 -## ʱÑÓ +## æ—¶å»¶ -×ÜʱÑÓ = ·¢ËÍʱÑÓ + ´«²¥Ê±ÑÓ + ´¦ÀíʱÑÓ + ÅŶÓʱÑÓ +总时延 = å�‘é€�æ—¶å»¶ + ä¼ æ’­æ—¶å»¶ + 处ç�†æ—¶å»¶ + 排队时延 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/ceee91c2-da26-4169-94c3-e4608b46b9ac.png) -### 1. ·¢ËÍʱÑÓ +### 1. å�‘é€�æ—¶å»¶ -Ö÷»ú»ò·ÓÉÆ÷·¢ËÍÊý¾ÝÖ¡ËùÐèÒªµÄʱ¼ä¡£ +主机或路由器å�‘é€�æ•°æ�®å¸§æ‰€éœ€è¦�的时间。 ![](http://latex.codecogs.com/gif.latex?\\\\delay=\frac{l(bit)}{v(bit/s)}) -ÆäÖÐ l ±íʾÊý¾ÝÖ¡µÄ³¤¶È£¬v ±íʾ·¢ËÍËÙÂÊ¡£ +其中 l 表示数æ�®å¸§çš„长度,v 表示å�‘é€�速率。 -### 2. ´«²¥Ê±ÑÓ +### 2. ä¼ æ’­æ—¶å»¶ -µç´Å²¨ÔÚÐŵÀÖд«²¥Ò»¶¨µÄ¾àÀëÐèÒª»¨·ÑµÄʱ¼ä£¬µç´Å²¨´«²¥ËٶȽӽü¹âËÙ¡£ +电ç£�波在信é�“中传播一定的è·�离需è¦�花费的时间,电ç£�波传播速度接近光速。 ![](http://latex.codecogs.com/gif.latex?\\\\delay=\frac{l(m)}{v(m/s)}) -ÆäÖÐ l ±íʾÐŵÀ³¤¶È£¬v ±íʾµç´Å²¨ÔÚÐŵÀÉϵĴ«²¥ËÙÂÊ¡£ +其中 l 表示信é�“长度,v 表示电ç£�波在信é�“上的传播速率。 -### 3. ´¦ÀíʱÑÓ +### 3. 处ç�†æ—¶å»¶ -Ö÷»ú»ò·ÓÉÆ÷ÊÕµ½·Ö×éʱ½øÐд¦ÀíËùÐèÒªµÄʱ¼ä£¬ÀýÈç·ÖÎöÊײ¿£¬´Ó·Ö×éÖÐÌáÈ¡Êý¾Ý²¿·ÖµÈ¡£ +主机或路由器收到分组时进行处ç�†æ‰€éœ€è¦�的时间,例如分æž�首部,从分组中æ��å�–æ•°æ�®éƒ¨åˆ†ç­‰ã€‚ -### 4. ÅŶÓʱÑÓ +### 4. 排队时延 -·Ö×éÔÚ·ÓÉÆ÷µÄÊäÈë¶ÓÁкÍÊä³ö¶ÓÁÐÖÐÅŶӵȴýµÄʱ¼ä£¬È¡¾öÓÚÍøÂ統ǰµÄͨÐÅÁ¿¡£ +分组在路由器的输入队列和输出队列中排队等待的时间,å�–决于网络当å‰�的通信é‡�。 -## ¼ÆËã»úÍøÂçÌåϵ½á¹¹* +## 计算机网络体系结构* ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/1005dc9d-9049-4b06-9524-6171e56ebd8c.png) -### 1. Æß²ãЭÒé +### 1. 七层å��è®® -Èçͼ a Ëùʾ£¬ÆäÖбíʾ²ãºÍ»á»°²ãÓÃ;ÈçÏ£º +如图 a 所示,其中表示层和会è¯�层用途如下: -1. ±íʾ²ã£ºÐÅÏ¢µÄÓï·¨ÓïÒåÒÔ¼°ËüÃǵĹØÁª£¬Èç¼ÓÃܽâÃÜ¡¢×ª»»·­Ò롢ѹËõ½âѹËõ£» -2. »á»°²ã£º²»Í¬»úÆ÷ÉϵÄÓû§Ö®¼ä½¨Á¢¼°¹ÜÀí»á»°¡£ +1. 表示层:信æ�¯çš„语法语义以å�Šå®ƒä»¬çš„å…³è�”,如加密解密ã€�转æ�¢ç¿»è¯‘ã€�压缩解压缩; +2. 会è¯�层:ä¸�å�Œæœºå™¨ä¸Šçš„用户之间建立å�Šç®¡ç�†ä¼šè¯�。 -### 2. Îå²ãЭÒé +### 2. 五层å��è®® -1. Ó¦ÓÃ²ã£ºÎªÌØ¶¨Ó¦ÓóÌÐòÌṩÊý¾Ý´«Êä·þÎñ£¬ÀýÈç HTTP¡¢DNS µÈ¡£Êý¾Ýµ¥Î»Îª±¨ÎÄ¡£ +1. 应用层:为特定应用程åº�æ��供数æ�®ä¼ è¾“æœ�务,例如 HTTPã€�DNS 等。数æ�®å�•ä½�为报文。 +<<<<<<< HEAD 2. ÔËÊä²ã£ºÌṩµÄÊǽø³Ì¼äµÄͨÓÃÊý¾Ý´«Êä·þÎñ¡£ÓÉÓÚÓ¦ÓòãЭÒéºÜ¶à£¬¶¨ÒåͨÓõÄÔËÊä²ãЭÒé¾Í¿ÉÒÔÖ§³Ö²»¶ÏÔö¶àµÄÓ¦ÓòãЭÒé¡£ÔËÊä²ã°üÀ¨Á½ÖÖЭÒ飺´«Êä¿ØÖÆÐ­Òé TCP£¬Ìá¹©ÃæÏòÁ¬½Ó¡¢¿É¿¿µÄÊý¾Ý´«Êä·þÎñ£¬Êý¾Ýµ¥Î»Îª±¨ÎĶΣ»Óû§Êý¾Ý±¨Ð­Òé UDP£¬ÌṩÎÞÁ¬½Ó¡¢¾¡×î´óŬÁ¦µÄÊý¾Ý´«Êä·þÎñ£¬Êý¾Ýµ¥Î»ÎªÓû§Êý¾Ý±¨¡£TCP Ö÷ÒªÌṩÍêÕûÐÔ·þÎñ£¬UDP Ö÷ÒªÌṩ¼°Ê±ÐÔ·þÎñ¡£ +======= +2. è¿�输层:æ��供的是进程间的通用数æ�®ä¼ è¾“æœ�务。由于应用层å��议很多,定义通用的è¿�输层å��议就å�¯ä»¥æ”¯æŒ�ä¸�断增多的应用层å��议。è¿�输层包括两ç§�å��议:传输控制å��è®® TCP,æ��ä¾›é�¢å�‘连接ã€�å�¯é� çš„æ•°æ�®ä¼ è¾“æœ�务,数æ�®å�•ä½�为报文段;用户数æ�®æŠ¥å��è®® UDP,æ��供无连接ã€�尽最大努力的数æ�®ä¼ è¾“æœ�务,数æ�®å�•ä½�为用户数æ�®æŠ¥ã€‚**TCP主è¦�æ��供完整性æœ�务,UDP主è¦�æ��ä¾›å�Šæ—¶æ€§æœ�务** +>>>>>>> 4bce52837493201c4d105edf92e21032b34ec813 -3. ÍøÂç²ã£ºÎªÖ÷»úÖ®¼äÌṩ·þÎñ£¬¶ø²»ÊÇÏñÔËÊä²ãЭÒéÄÇÑùÊÇΪÖ÷»úÖеĽø³ÌÌṩ·þÎñ¡£ÍøÂç²ã°ÑÔËÊä²ã²úÉúµÄ±¨ÎĶλòÕßÓû§Êý¾Ý±¨·â×°³É·Ö×éÀ´½øÐд«Êä¡£ +3. 网络层:为主机之间æ��ä¾›æœ�务,而ä¸�是åƒ�è¿�输层å��议那样是为主机中的进程æ��ä¾›æœ�务。网络层把è¿�输层产生的报文段或者用户数æ�®æŠ¥å°�装æˆ�分组æ�¥è¿›è¡Œä¼ è¾“。 -4. Êý¾ÝÁ´Â·²ã£ºÍøÂç²ãÕë¶ÔµÄ»¹ÊÇÖ÷»úÖ®¼ä£¬¶øÖ÷»úÖ®¼ä¿ÉÒÔÓкܶàÁ´Â·£¬Á´Â·²ãЭÒé¾ÍÊÇΪÏàÁÚ½áµãÖ®¼äÌṩ·þÎñ¡£Êý¾ÝÁ´Â·²ã°ÑÍøÂç²ã´«À´µÄ·Ö×é·â×°³ÉÖ¡¡£ +4. æ•°æ�®é“¾è·¯å±‚:网络层针对的还是主机之间,而主机之间å�¯ä»¥æœ‰å¾ˆå¤šé“¾è·¯ï¼Œé“¾è·¯å±‚å��议就是为相邻结点之间æ��ä¾›æœ�务。数æ�®é“¾è·¯å±‚把网络层传æ�¥çš„分组å°�装æˆ�帧。 -5. ÎïÀí²ã£º¿¼ÂǵÄÊÇÔõÑùÔÚ´«ÊäýÌåÉÏ´«ÊäÊý¾Ý±ÈÌØÁ÷£¬¶ø²»ÊÇÖ¸¾ßÌåµÄ´«ÊäýÌå¡£ÎïÀí²ãµÄ×÷ÓÃÊǾ¡¿ÉÄÜÆÁ±Î´«ÊäýÌåºÍͨÐÅÊֶεIJîÒ죬ʹÎïÀí²ãÉϵÄÊý¾ÝÁ´Â·²ã¸Ð¾õ²»µ½ÕâЩ²îÒì¡£ +5. 物ç�†å±‚:考虑的是怎样在传输媒体上传输数æ�®æ¯”特æµ�,而ä¸�是指具体的传输媒体。物ç�†å±‚的作用是尽å�¯èƒ½å±�蔽传输媒体和通信手段的差异,使物ç�†å±‚上的数æ�®é“¾è·¯å±‚感觉ä¸�到这些差异。 -### 3. Êý¾ÝÔÚ¸÷²ãÖ®¼äµÄ´«µÝ¹ý³Ì +### 3. æ•°æ�®åœ¨å�„层之间的传递过程 -ÔÚÏòϵĹý³ÌÖУ¬ÐèÒªÌí¼ÓϲãЭÒéËùÐèÒªµÄÊײ¿»òÕßβ²¿£¬¶øÔÚÏòÉϵĹý³ÌÖв»¶Ï²ð¿ªÊײ¿ºÍβ²¿¡£ +在å�‘下的过程中,需è¦�添加下层å��议所需è¦�的首部或者尾部,而在å�‘上的过程中ä¸�断拆开首部和尾部。 -·ÓÉÆ÷Ö»ÓÐÏÂÃæÈý²ãЭÒ飬ÒòΪ·ÓÉÆ÷λÓÚÍøÂçºËÐÄÖУ¬²»ÐèҪΪ½ø³Ì»òÕßÓ¦ÓóÌÐòÌṩ·þÎñ£¬Òò´ËÒ²¾Í²»ÐèÒªÔËÊä²ãºÍÓ¦Óò㡣 +路由器å�ªæœ‰ä¸‹é�¢ä¸‰å±‚å��议,因为路由器ä½�于网络核心中,ä¸�需è¦�为进程或者应用程åº�æ��ä¾›æœ�务,因此也就ä¸�需è¦�è¿�输层和应用层。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/f7d5da89-2d75-4d8f-85e7-6b608865dc00.jpg) -### 4. TCP/IP Ìåϵ½á¹¹ +### 4. TCP/IP 体系结构 -ËüÖ»ÓÐËIJ㣬Ï൱ÓÚÎå²ãЭÒéÖÐÊý¾ÝÁ´Â·²ãºÍÎïÀí²ãºÏ²¢ÎªÍøÂç½Ó¿Ú²ã¡£ +它å�ªæœ‰å››å±‚,相当于五层å��议中数æ�®é“¾è·¯å±‚和物ç�†å±‚å�ˆå¹¶ä¸ºç½‘络接å�£å±‚。 -ÏÖÔÚµÄ TCP/IP Ìåϵ½á¹¹²»Ñϸñ×ñÑ­ OSI ·Ö²ã¸ÅÄӦÓòã¿ÉÄÜ»áÖ±½ÓʹÓà IP ²ã»òÕßÍøÂç½Ó¿Ú²ã¡£ +现在的 TCP/IP 体系结构ä¸�严格é�µå¾ª OSI 分层概念,应用层å�¯èƒ½ä¼šç›´æŽ¥ä½¿ç”¨ IP 层或者网络接å�£å±‚。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/3e2200b3-1c18-4853-ae42-7788e8e1f939.png) -TCP/IP ЭÒé×åÊÇÒ»ÖÖɳ©ÐÎ×´£¬ÖмäСÁ½±ß´ó£¬IP ЭÒéÔÚÆäÖÐÕ¼ÓþÙ×ãÇáÖØµÄµØÎ»¡£ +TCP/IP å��è®®æ—�是一ç§�æ²™æ¼�形状,中间å°�两边大,IP å��议在其中å� ç”¨ä¸¾è¶³è½»é‡�的地ä½�。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/9ecaebee-670e-4cb2-9cdb-3029c00f33bd.png) +### è�Œæ–°ç–‘问: +1. 光纤传输,为什么ä¸�å�Œå…‰çº¤ç½‘速会有差别?答:光是信æ�¯çš„载体,光的数é‡�决定传输信æ�¯çš„æ•°é‡�。 +# 第二章 物ç�†å±‚ -# µÚ¶þÕ ÎïÀí²ã +## 通信方å¼� -## ͨÐÅ·½Ê½ +1. å�•å�‘通信,å�ˆç§°ä¸ºå�•工通信; +2. å�Œå�‘交替通信,å�ˆç§°ä¸ºå�Šå�Œå·¥é€šä¿¡ï¼› +3. å�Œå�‘å�Œæ—¶é€šä¿¡ï¼Œå�ˆç§°ä¸ºå…¨å�Œå·¥é€šä¿¡ã€‚ -1. µ¥ÏòͨÐÅ£¬ÓÖ³ÆÎªµ¥¹¤Í¨ÐÅ£» -2. Ë«Ïò½»ÌæÍ¨ÐÅ£¬ÓÖ³ÆÎª°ëË«¹¤Í¨ÐÅ£» -3. Ë«ÏòͬʱͨÐÅ£¬ÓÖ³ÆÎªÈ«Ë«¹¤Í¨ÐÅ¡£ +## 带通调制 -## ´øÍ¨µ÷ÖÆ - -Ä£ÄâÐźÅÊÇÁ¬ÐøµÄÐźţ¬Êý×ÖÐźÅÊÇÀëÉ¢µÄÐźš£´øÍ¨µ÷ÖÆ°ÑÊý×ÖÐźÅת»»ÎªÄ£ÄâÐźš£ +模拟信å�·æ˜¯è¿žç»­çš„ä¿¡å�·ï¼Œæ•°å­—ä¿¡å�·æ˜¯ç¦»æ•£çš„ä¿¡å�·ã€‚带通调制把数字信å�·è½¬æ�¢ä¸ºæ¨¡æ‹Ÿä¿¡å�·ã€‚ ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/d2c55c84-aa1f-43c1-bd97-457bcb7816b3.png) -## ÐŵÀ¸´Óü¼Êõ +## ä¿¡é�“å¤�用技术 -### 1. Ƶ·Ö¸´Óá¢Ê±·Ö¸´Óà +### 1. 频分å¤�用ã€�时分å¤�用 -Ƶ·Ö¸´ÓõÄËùÓÐÓû§ÔÚÏàͬµÄʱ¼äÕ¼Óò»Í¬µÄƵÂÊ´ø¿í×ÊÔ´£»Ê±·Ö¸´ÓõÄËùÓÐÓû§ÔÚ²»Í¬µÄʱ¼äÕ¼ÓÃÏàͬµÄƵÂÊ´ø¿í×ÊÔ´¡£ +频分å¤�用的所有用户在相å�Œçš„æ—¶é—´å� ç”¨ä¸�å�Œçš„频率带宽资æº�;时分å¤�用的所有用户在ä¸�å�Œçš„æ—¶é—´å� ç”¨ç›¸å�Œçš„频率带宽资æº�。 -ʹÓÃÕâÁ½ÖÖ·½Ê½½øÐÐͨÐÅ£¬ÔÚͨÐŵĹý³ÌÖÐÓû§»áÒ»Ö±Õ¼ÓÃÒ»²¿·ÖÐŵÀ×ÊÔ´¡£µ«ÊÇÓÉÓÚ¼ÆËã»úÊý¾ÝµÄÍ»·¢ÐÔÖÊ£¬Ã»±ØÒªÒ»Ö±Õ¼ÓÃÐŵÀ×ÊÔ´¶ø²»Èóö¸øÆäËüÓû§Ê¹Óã¬Òò´ËÕâÁ½ÖÖ·½Ê½¶ÔÐŵÀµÄÀûÓÃÂʶ¼²»¸ß¡£ +使用这两ç§�æ–¹å¼�进行通信,在通信的过程中用户会一直å� ç”¨ä¸€éƒ¨åˆ†ä¿¡é�“资æº�。但是由于计算机数æ�®çš„çª�å�‘性质,没必è¦�一直å� ç”¨ä¿¡é�“资æº�而ä¸�让出给其它用户使用,因此这两ç§�æ–¹å¼�对信é�“的利用率都ä¸�高。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/543d47a1-f0dd-414f-b23c-0c142c814854.png) -### 2. ͳ¼ÆÊ±·Ö¸´Óà +### 2. 统计时分å¤�用 -ÊǶÔʱ·Ö¸´ÓõÄÒ»ÖָĽø£¬²»¹Ì¶¨Ã¿¸öÓû§ÔÚʱ·Ö¸´ÓÃÖ¡ÖеÄλÖã¬Ö»ÒªÓÐÊý¾Ý¾Í¼¯ÖÐÆðÀ´×é³Éʱ·Ö¸´ÓÃÖ¡È»ºó·¢ËÍ¡£ +是对时分å¤�用的一ç§�改进,ä¸�固定æ¯�个用户在时分å¤�用帧中的ä½�置,å�ªè¦�有数æ�®å°±é›†ä¸­èµ·æ�¥ç»„æˆ�时分å¤�用帧然å�Žå�‘é€�。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/29058e09-bb72-4040-a73d-4c497895e9ce.jpg) -### 3. ²¨·Ö¸´Óà +### 3. 波分å¤�用 -¹âµÄƵ·Ö¸´Óá£ÓÉÓÚ¹âµÄƵÂʺܸߣ¬Òò´Ëϰ¹ßÉÏÓò¨³¤¶ø²»ÊÇÆµÂÊÀ´±íʾËùʹÓõĹâÔØ²¨¡£ +光的频分å¤�用。由于光的频率很高,因此习惯上用波长而ä¸�是频率æ�¥è¡¨ç¤ºæ‰€ä½¿ç”¨çš„光载波。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/78534153-88d1-4f83-a6e0-59064dbdc43a.png) -### 4. Âë·Ö¸´Óà +### 4. ç �分å¤�用 -Ϊÿ¸öÓû§·ÖÅä m bit µÄÂëÆ¬£¬²¢ÇÒËùÓеÄÂëÆ¬Õý½»£¬¶ÔÓÚÈÎÒâÁ½¸öÂëÆ¬ $\vec{S}$ ºÍ $\vec{T}$ ÓÐ +为æ¯�个用户分é…� m bit çš„ç �片,并且所有的ç �片正交,对于任æ„�两个ç �片 $\vec{S}$ å’Œ $\vec{T}$ 有 ![](http://latex.codecogs.com/gif.latex?\\\\\vec{S}\cdot\vec{T}=0) -ΪÁË·½±ã£¬È¡ m=8£¬ÉèÂëÆ¬ $\vec{S}$ Ϊ 00011011¡£ÔÚÓµÓиÃÂëÆ¬µÄÓû§·¢ËͱÈÌØ 1 ʱ¾Í·¢Ë͸ÃÂëÆ¬£¬·¢ËͱÈÌØ 0 ʱ¾Í·¢Ë͸ÃÂëÆ¬µÄ·´Âë 11100100¡£ +为了方便,å�– m=8,设ç �片 $\vec{S}$ 为 00011011。在拥有该ç �片的用户å�‘é€�比特 1 æ—¶å°±å�‘é€�该ç �片,å�‘é€�比特 0 æ—¶å°±å�‘é€�该ç �片的å��ç � 11100100。 -ÔÚ¼ÆËãʱ½« 00011011 ¼Ç×÷ (-1 -1 -1 +1 +1 -1 +1 +1)£¬¿ÉÒԵõ½ +在计算时将 00011011 记作 (-1 -1 -1 +1 +1 -1 +1 +1),å�¯ä»¥å¾—到 ![](http://latex.codecogs.com/gif.latex?\\\\\frac{1}{m}\vec{S}\cdot\vec{S}=1) ![](http://latex.codecogs.com/gif.latex?\\\\\frac{1}{m}\vec{S}\cdot\vec{S'}=-1) -ÆäÖÐ $\vec{S'}$ Ϊ $\vec{S}$ µÄ·´Âë¡£ +其中 $\vec{S'}$ 为 $\vec{S}$ çš„å��ç �。 -ÀûÓÃÉÏÃæµÄʽ×ÓÎÒÃÇÖªµÀ£¬µ±½ÓÊÕ¶ËʹÓÃÂëÆ¬ $\vec{S}$ ¶Ô½ÓÊÕµ½µÄÊý¾Ý½øÐÐÄÚ»ýÔËËãʱ£¬½á¹ûΪ 0 µÄÊÇÆäËüÓû§·¢Ë͵ÄÊý¾Ý£¬½á¹ûΪ 1 µÄÊÇÓû§·¢Ë͵ıÈÌØ 1£¬½á¹ûΪ -1 µÄÊÇÓû§·¢Ë͵ıÈÌØ 0¡£ +利用上é�¢çš„å¼�å­�我们知é�“,当接收端使用ç �片 $\vec{S}$ 对接收到的数æ�®è¿›è¡Œå†…积è¿�算时,结果为 0 的是其它用户å�‘é€�的数æ�®ï¼Œç»“果为 1 的是用户å�‘é€�的比特 1,结果为 -1 的是用户å�‘é€�的比特 0。 -Âë·Ö¸´ÓÃÐèÒª·¢Ë͵ÄÊý¾ÝÁ¿ÎªÔ­Ï鵀 m ±¶¡£ +ç �分å¤�用需è¦�å�‘é€�的数æ�®é‡�为原先的 m å€�。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/0042edad-8e3b-4279-bd93-6906fcd1b640.jpg) -# µÚÈýÕ Êý¾ÝÁ´Â·²ã +# 第三章 æ•°æ�®é“¾è·¯å±‚ -## Èý¸ö»ù±¾ÎÊÌâ +## 三个基本问题 -### 1. ·â×°³ÉÖ¡ +### 1. å°�装æˆ�帧 -½«ÍøÂç²ã´«ÏÂÀ´µÄ·Ö×éÌí¼ÓÊײ¿ºÍβ²¿£¬ÓÃÓÚ±ê¼ÇÖ¡µÄ¿ªÊ¼ºÍ½áÊø¡£ +将网络层传下æ�¥çš„分组添加首部和尾部,用于标记帧的开始和结æ�Ÿã€‚ ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/ea5ed9b2-6d9f-48fb-b890-0288caf9088a.jpg) -### 2. ͸Ã÷´«Êä +### 2. é€�明传输 -͸Ã÷±íʾһ¸öʵ¼Ê´æÔÚµÄÊÂÎï¿´ÆðÀ´ºÃÏñ²»´æÔÚÒ»Ñù¡£ +é€�明表示一个实际存在的事物看起æ�¥å¥½åƒ�ä¸�存在一样。 -Ö¡ÖÐÓÐÊײ¿ºÍβ²¿£¬Èç¹ûÖ¡µÄÊý¾Ý²¿·Öº¬ÓкÍÊײ¿Î²²¿ÏàͬµÄÄÚÈÝ£¬ÄÇô֡µÄ¿ªÊ¼ºÍ½áÊøÎ»Öþͻᱻ´íÎóµÄÅж¨¡£ÐèÒªÔÚÊý¾ÝÖгöÏÖÊײ¿Î²²¿ÏàͬµÄÄÚÈÝÇ°Ãæ²åÈëתÒå×Ö·û£¬Èç¹ûÐèÒª´«ÊäµÄÄÚÈÝÕýºÃ¾ÍÊÇתÒå×Ö·û£¬ÄÇô¾ÍÔÚתÒå×Ö·ûÇ°ÃæÔÙ¼Ó¸öתÒå×Ö·û£¬ÔÚ½ÓÊն˽øÐд¦ÀíÖ®ºó¿ÉÒÔ»¹Ô­³öԭʼÊý¾Ý¡£Õâ¸ö¹ý³Ì͸Ã÷´«ÊäµÄÄÚÈÝÊÇתÒå×Ö·û£¬Óû§²ì¾õ²»µ½×ªÒå×Ö·ûµÄ´æÔÚ¡£ +帧中有首部和尾部,如果帧的数æ�®éƒ¨åˆ†å�«æœ‰å’Œé¦–部尾部相å�Œçš„内容,那么帧的开始和结æ�Ÿä½�置就会被错误的判定。需è¦�在数æ�®ä¸­å‡ºçŽ°é¦–éƒ¨å°¾éƒ¨ç›¸å�Œçš„内容å‰�é�¢æ�’入转义字符,如果需è¦�传输的内容正好就是转义字符,那么就在转义字符å‰�é�¢å†�加个转义字符,在接收端进行处ç�†ä¹‹å�Žå�¯ä»¥è¿˜åŽŸå‡ºåŽŸå§‹æ•°æ�®ã€‚这个过程é€�明传输的内容是转义字符,用户察觉ä¸�到转义字符的存在。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/44e1d90e-3fe6-4dd6-8dce-6daab12e7663.jpg) -### 3. ²î´í¼ì²â +### 3. 差错检测 -ĿǰÊý¾ÝÁ´Â·²ã¹ã·ºÊ¹ÓÃÁËÑ­»·ÈßÓà¼ìÑ飨CRC£©À´¼ì²é±ÈÌØ²î´í¡£ +ç›®å‰�æ•°æ�®é“¾è·¯å±‚广泛使用了循环冗余检验(CRC)æ�¥æ£€æŸ¥æ¯”特差错。widely used in 802.11 Wifi ATM ,Ethernet. +注æ„�差错检验ä¸�是100%å�¯é� ã€‚ + +除了CRC,还有的检验方法比如: +#### 奇å�¶æ ¡éªŒ +添加1ä½�使1çš„ä½�数为奇数或å�¶æ•° + +更进一步的方法**二维奇å�¶æ ¡éªŒ**,ä¸�但å�¯ä»¥æ£€é”™è¿˜å�¯ä»¥çº é”™éƒ¨åˆ†é”™è¯¯ +#### 检验和方法 +具体å�‚考UDP检验和计算方法判断 + +<<<<<<< HEAD ³ýÁË CRC£¬»¹ÓеļìÑé·½·¨±ÈÈ磺 - ÆæÅ¼Ð£Ñ飺Ìí¼Ó 1 λʹ 1 µÄλÊýÎªÆæÊý»òżÊý£¬¸ü½øÒ»²½µÄ¶þÎ¬ÆæÅ¼Ð£Ñé·½·¨£¬²»µ«¿ÉÒÔ¼ì´í»¹¿ÉÒÔ¾À´í²¿·Ö´íÎó¡£ - ¼ìÑéºÍ·½·¨£º¾ßÌå²Î¿¼ UDP ¼ìÑéºÍ¼ÆËã·½·¨£» ## µã¶ÔµãÐŵÀ - PPP ЭÒé +======= +## 点对点信é�“ - PPP å��è®® +>>>>>>> 4bce52837493201c4d105edf92e21032b34ec813 -»¥ÁªÍøÓû§Í¨³£ÐèÒªÁ¬½Óµ½Ä³¸ö ISP Ö®ºó²ÅÄܽÓÈëµ½»¥ÁªÍø£¬PPP ЭÒé¾ÍÊÇÓû§¼ÆËã»úºÍ ISP ½øÐÐͨÐÅʱËùʹÓõÄÊý¾ÝÁ´Â·²ãЭÒé¡£ +互è�”网用户通常需è¦�连接到æŸ�个 ISP 之å�Žæ‰�能接入到互è�”网,PPP å��议就是用户计算机和 ISP 进行通信时所使用的数æ�®é“¾è·¯å±‚å��议。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/8b5bd2c8-8425-4a8b-89db-235c95800de9.jpg) -ÔÚ PPP µÄÖ¡ÖУ¬F ×Ö¶ÎΪ֡µÄ¶¨½ç·û£¬A ºÍ C ÔÝʱûÓÐÒâÒå¡£FCS ÊÇʹÓà CRC µÄ¼ìÑéÐòÁС£ÐÅÏ¢²¿·ÖµÄ³¤¶È²»³¬¹ý 1500¡£ +在 PPP 的帧中,F 字段为帧的定界符,A å’Œ C 暂时没有æ„�义。FCS 是使用 CRC 的检验åº�列。信æ�¯éƒ¨åˆ†çš„长度ä¸�超过 1500。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/a5fa89e7-54b9-4e2f-8c48-a35712d7b2f5.jpg) -## ¾ÖÓòÍøµÄÍØÆË +## 局域网的拓扑 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/8b15e36f-69b4-46b6-a07c-7234ac7c7927.jpg) -## ¹ã²¥ÐŵÀ - CSMA/CD ЭÒé* +## Media Access Control +媒体访问控制 +主è¦�处ç�†å¯¹äºŽ1个链路上多个节点的访问 -Ôڹ㲥ÐŵÀÉÏ£¬Í¬Ò»Ê±¼äÖ»ÄÜÔÊÐíһ̨¼ÆËã»ú·¢ËÍÊý¾Ý¡£ +### 多路访问控制 +- ä¿¡é�“划分 +- è½®æµ� +- éš�机接入 +éš�机访问有Slotted ALOHA(最大效率0.37),ALOHA(最大效率时隙ALOHAçš„1å�Š)å’ŒCSMA/CD +## 广播信é�“ - CSMA/CD å��è®®* -CSMA/CD ±íÊ¾ÔØ²¨¼àÌý¶àµã½ÓÈë / Åöײ¼ì²â¡£ +在广播信é�“上,å�Œä¸€æ—¶é—´å�ªèƒ½å…�许一å�°è®¡ç®—机å�‘é€�æ•°æ�®ã€‚ -- **¶àµã½ÓÈë**£ºËµÃ÷ÕâÊÇ×ÜÏßÐÍÍøÂ磬Ðí¶à¼ÆËã»úÒÔ¶àµãµÄ·½Ê½Á¬½Óµ½×ÜÏßÉÏ¡£ -- **ÔØ²¨¼àÌý**£ºÃ¿¸öÕ¾¶¼±ØÐ벻ͣµØ¼ìÌýÐŵÀ¡£ÔÚ·¢ËÍǰ£¬Èç¹û¼ìÌýÐŵÀÕýÔÚʹÓ㬾ͱØÐëµÈ´ý¡£ -- **Åöײ¼ì²â**£ºÔÚ·¢ËÍÖУ¬Èç¹û¼ìÌýÐŵÀÒÑÓÐÆäËüÕ¾ÕýÔÚ·¢ËÍÊý¾Ý£¬¾Í±íʾ·¢ÉúÁËÅöײ¡£ËäȻÿһ¸öÕ¾ÔÚ·¢ËÍÊý¾Ý֮ǰ¶¼ÒѾ­¼ìÌýÐŵÀΪ¿ÕÏУ¬µ«ÊÇÓÉÓÚµç´Å²¨µÄ´«²¥Ê±ÑӵĴæÔÚ£¬»¹ÊÇÓпÉÄܻᷢÉúÅöײ¡£ +CSMA/CD 表示载波监å�¬å¤šç‚¹æŽ¥å…¥ / 碰撞检测。 + +- **多点接入**:说明这是总线型网络,许多计算机以多点的方å¼�连接到总线上。 +- **载波监å�¬**:æ¯�个站都必须ä¸�å�œåœ°æ£€å�¬ä¿¡é�“。在å�‘é€�å‰�,如果检å�¬ä¿¡é�“正在使用,就必须等待。 +- **碰撞检测**:在å�‘é€�中,如果检å�¬ä¿¡é�“已有其它站正在å�‘é€�æ•°æ�®ï¼Œå°±è¡¨ç¤ºå�‘生了碰撞。虽然æ¯�一个站在å�‘é€�æ•°æ�®ä¹‹å‰�都已ç»�检å�¬ä¿¡é�“为空闲,但是由于电ç£�波的传播时延的存在,还是有å�¯èƒ½ä¼šå�‘生碰撞。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/f9ed4da5-0032-41e6-991a-36d995ec28fd.png) -¼Ç¶Ëµ½¶ËµÄ´«²¥Ê±ÑÓΪ ¦Ó£¬×îÏÈ·¢Ë͵ÄÕ¾µã×î¶à¾­¹ý 2¦Ó ¾Í¿ÉÒÔÖªµÀÊÇ·ñ·¢ÉúÁËÅöײ£¬³Æ 2¦Ó Ϊ **ÕùÓÃÆÚ**¡£Ö»Óо­¹ýÕùÓÃÆÚÖ®ºó»¹Ã»Óмì²âµ½Åöײ£¬²ÅÄܿ϶¨Õâ´Î·¢ËͲ»»á·¢ÉúÅöײ¡£ +记端到端的传播时延为 τ,最先å�‘é€�的站点最多ç»�过 2Ï„ å°±å�¯ä»¥çŸ¥é�“是å�¦å�‘生了碰撞,称 2Ï„ 为 **争用期**。å�ªæœ‰ç»�过争用期之å�Žè¿˜æ²¡æœ‰æ£€æµ‹åˆ°ç¢°æ’žï¼Œæ‰�能肯定这次å�‘é€�ä¸�会å�‘生碰撞。 -µ±·¢ÉúÅöײʱ£¬Õ¾µãҪֹͣ·¢ËÍ£¬µÈ´ýÒ»¶Îʱ¼äÔÙ·¢ËÍ¡£Õâ¸öʱ¼ä²ÉÓà **½Ø¶Ï¶þ½øÖÆÖ¸ÊýÍ˱ÜËã·¨** À´È·¶¨£¬´ÓÀëÉ¢µÄÕûÊý¼¯ºÏ {0, 1, .., (2k-1)} ÖÐËæ»úÈ¡³öÒ»¸öÊý£¬¼Ç×÷ r£¬È»ºóÈ¡ r ±¶µÄÕùÓÃÆÚ×÷ÎªÖØ´«µÈ´ýʱ¼ä¡£ +当第k次å�‘生碰撞时,站点è¦�å�œæ­¢å�‘é€�,等待一段时间å†�å�‘é€�。这个时间采用 **截断二进制指数退é�¿ç®—法** æ�¥ç¡®å®šï¼Œä»Žç¦»æ•£çš„æ•´æ•°é›†å�ˆ {0, 1, .., (2k-1)} 中éš�机å�–出一个数,记作 r,然å�Žå�– r*512bit 的传输时间作为é‡�传等待时间。 +### è�Œæ–°ç–‘é—® +1. 计算机如何监å�¬åˆ°ç¢°æ’žï¼Ÿ -## ¼¯Ï߯÷ +ç�†è§£ï¼šå¹¿æ’­é€šä¿¡ä¸­ç”µç£�波以一定电场强度传播,当é�‡åˆ°å¯¹æ–¹ä¼ è¾“æ•°æ�®ï¼Œå·±æ–¹æŽ¥æ”¶å™¨ä¼šå�‘现干扰(类比机械波的干涉,振幅改å�˜ï¼Œç”µç£�波没有振幅) +## 集线器 -´Ó±íÃæÉÏ¿´£¬Ê¹Óü¯Ï߯÷µÄ¾ÖÓòÍøÔÚÎïÀíÉÏÊÇÒ»¸öÐÇÐÍÍø¡£µ«ÊǼ¯Ï߯÷ʹÓõç×ÓÆ÷¼þÀ´Ä£Äâʵ¼ÊÀÂÏߵŤ×÷£¬Âß¼­ÉÏÈÔÊÇÒ»¸ö×ÜÏßÍø£¬Õû¸öϵͳÈÔÏñÒ»¸ö´«Í³ÒÔÌ«ÍøÄÇÑùÔËÐС£ +从表é�¢ä¸Šçœ‹ï¼Œä½¿ç”¨é›†çº¿å™¨çš„局域网在物ç�†ä¸Šæ˜¯ä¸€ä¸ªæ˜Ÿåž‹ç½‘。但是集线器使用电å­�器件æ�¥æ¨¡æ‹Ÿå®žé™…缆线的工作,逻辑上ä»�是一个总线网,整个系统ä»�åƒ�一个传统以太网那样è¿�行。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/897a4f4e-2683-44e1-a26a-c0d0234dc576.jpg) ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/40c3f8e5-3a20-45b6-a60c-77b9b952e104.jpg) -## MAC ²ã +## 路由器交æ�¢æœºå’Œé›†çº¿å™¨çš„对比 +\ |集线器|路由器|交æ�¢æœº| +|--|-----------------|------|-----| +|traffic isolation |No|Yes|Yes| +|å�³æ�’å�³ç”¨|Yes|No|Yes| -MAC µØÖ·ÊÇ 6 ×Ö½Ú£¨48 룩µÄµØÖ·£¬ÓÃÓÚΨһ±íÊ¾ÍøÂçÊÊÅäÆ÷£¨Íø¿¨£©£¬Ò»Ì¨Ö÷»úÓµÓжàÉÙ¸öÊÊÅäÆ÷¾ÍÓжàÉÙ¸ö MAC µØÖ·£¬ÀýÈç±Ê¼Ç±¾µçÄÔÆÕ±é´æÔÚÎÞÏßÍøÂçÊÊÅäÆ÷ºÍÓÐÏßÍøÂçÊÊÅäÆ÷¡£ +路由器æ��供防ç�«å¢™ä¿�护针对广播风暴,交æ�¢æœºä¸�é™�制 +## MAC 层 + +MAC 地å�€æ˜¯ 6 字节(48 ä½�)的地å�€ï¼Œç”¨äºŽå”¯ä¸€è¡¨ç¤ºç½‘络适é…�器(网å�¡ï¼‰ï¼Œä¸€å�°ä¸»æœºæ‹¥æœ‰å¤šå°‘个适é…�器就有多少个 MAC 地å�€ï¼Œä¾‹å¦‚笔记本电脑普é��存在无线网络适é…�器和有线网络适é…�器。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/50d38e84-238f-4081-8876-14ef6d7938b5.jpg) -- **ÀàÐÍ**£º±ê¼ÇÉϲãʹÓõÄЭÒ飻 -- **Êý¾Ý**£º³¤¶ÈÔÚ 46-1500 Ö®¼ä£¬Èç¹û̫СÔòÐèÒªÌî³ä£» -- **FCS**£ºÖ¡¼ìÑéÐòÁУ¬Ê¹ÓõÄÊÇ CRC ¼ìÑé·½·¨£» -- **ǰͬ²½Âë**£ºÖ»ÊÇΪÁ˼ÆËã FCS ÁÙʱ¼ÓÈëµÄ£¬¼ÆËã½áÊøÖ®ºó»á¶ªÆú¡£ +- **类型**:标记上层使用的å��议; +- **æ•°æ�®**:长度在 46-1500 之间,如果太å°�则需è¦�å¡«å……ï¼› +- **FCS**:帧检验åº�列,使用的是 CRC 检验方法; +- **å‰�å�Œæ­¥ç �**:å�ªæ˜¯ä¸ºäº†è®¡ç®— FCS 临时加入的,计算结æ�Ÿä¹‹å�Žä¼šä¸¢å¼ƒã€‚ -## ÐéÄâ¾ÖÓòÍø +## 虚拟局域网 -ÐéÄâ¾ÖÓòÍø¿ÉÒÔ½¨Á¢ÓëÎïÀíλÖÃÎ޹صÄÂß¼­×飬ֻÓÐÔÚͬһ¸öÐéÄâ¾ÖÓòÍøÖеijÉÔ±²Å»áÊÕµ½Á´Â·²ã¹ã²¥ÐÅÏ¢£¬ÀýÈçÏÂͼÖÐ (A1, A2, A3, A4) ÊôÓÚÒ»¸öÐéÄâ¾ÖÓòÍø£¬A1 ·¢Ë͵Ĺ㲥»á±» A2¡¢A3¡¢A4 ÊÕµ½£¬¶øÆäËüÕ¾µãÊÕ²»µ½¡£ +虚拟局域网å�¯ä»¥å»ºç«‹ä¸Žç‰©ç�†ä½�置无关的逻辑组,å�ªæœ‰åœ¨å�Œä¸€ä¸ªè™šæ‹Ÿå±€åŸŸç½‘中的æˆ�员æ‰�会收到链路层广播信æ�¯ï¼Œä¾‹å¦‚下图中 (A1, A2, A3, A4) 属于一个虚拟局域网,A1 å�‘é€�的广播会被 A2ã€�A3ã€�A4 收到,而其它站点收ä¸�到。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/a74b70ac-323a-4b31-b4d5-90569b8a944b.png) -# µÚËÄÕÂ ÍøÂç²ã* +# 第四章 网络层* -## Íø¼ÊЭÒé IP ¸ÅÊö +### 虚电路和数æ�®æŠ¥ç½‘络 -ÒòÎªÍøÂç²ãÊÇÕû¸ö»¥ÁªÍøµÄºËÐÄ£¬Òò´ËÓ¦µ±ÈÃÍøÂç²ã¾¡¿ÉÄܼòµ¥¡£ÍøÂç²ãÏòÉÏÖ»Ìṩ¼òµ¥Áé»îµÄ¡¢ÎÞÁ¬½ÓµÄ¡¢¾¡×î´óŬÁ¦½»»¥µÄÊý¾Ý±¨·þÎñ¡£ +虚电路是网络层的有连接æœ�务如ATM -ʹÓà IP ЭÒ飬¿ÉÒÔ°ÑÒì¹¹µÄÎïÀíÍøÂçÁ¬½ÓÆðÀ´£¬Ê¹µÃÔÚÍøÂç²ã¿´ÆðÀ´ºÃÏñÊÇÒ»¸öͳһµÄÍøÂç¡£ +æ•°æ�®æŠ¥ç½‘络是网络层的无连接æœ�务 + +主机与主机之间ä¸�å�Œæ—¶æ��供这两ç§�æœ�务 + +## 网际å��è®® IP 概述 + +因为网络层是整个互è�”网的核心,因此应当让网络层尽å�¯èƒ½ç®€å�•。网络层å�‘上æ��供简å�•ç�µæ´»çš„ã€�无连接的ã€�尽最大努力交互的数æ�®æŠ¥æœ�务。 + +使用 IP å��议,å�¯ä»¥æŠŠå¼‚构的物ç�†ç½‘络连接起æ�¥ï¼Œä½¿å¾—在网络层看起æ�¥å¥½åƒ�是一个统一的网络。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/fe3d224c-8ffd-40f9-85b1-86ffe1393f6c.jpg) -Óë IP ЭÒéÅäÌ×ʹÓõϹÓÐÈý¸öЭÒ飺 +与 IP å��è®®é…�套使用的还有三个å��议: -1. µØÖ·½âÎöЭÒé ARP£¨Address Resolution Protocol£© -2. Íø¼Ê¿ØÖƱ¨ÎÄЭÒé ICMP£¨Internet Control Message Protocol£© -3. Íø¼Ê×é¹ÜÀíЭÒé IGMP£¨Internet Group Management Protocol£© +1. 地å�€è§£æž�å��è®® ARP(Address Resolution Protocol) +2. 网际控制报文å��è®® ICMP(Internet Control Message Protocol) +3. 网际组管ç�†å��è®® IGMP(Internet Group Management Protocol) ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/163cf8b4-5f30-46c9-af00-316a71b3c890.jpg) -## IP Êý¾Ý±¨¸ñʽ +## IP æ•°æ�®æŠ¥æ ¼å¼� ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/8681db55-0873-434b-aa98-83d07e8392ae.jpg) -- **°æ±¾** : ÓÐ 4£¨IPv4£©ºÍ 6£¨IPv6£©Á½¸öÖµ£» +- **版本** : 有 4(IPv4)和 6(IPv6)两个值; -- **Êײ¿³¤¶È** : Õ¼ 4 룬Òò´Ë×î´óֵΪ 15¡£ÖµÎª 1 ±íʾµÄÊÇ 1 ¸ö 32 λ×ֵij¤¶È£¬Ò²¾ÍÊÇ 4 ×Ö½Ú¡£ÒòΪÊײ¿¹Ì¶¨³¤¶ÈΪ 20 ×Ö½Ú£¬Òò´Ë¸ÃÖµ×îСΪ 5¡£Èç¹û¿ÉÑ¡²¿·ÖµÄ³¤¶È²»ÊÇ 4 ×Ö½ÚµÄÕûÊý±¶£¬¾ÍÓÃβ²¿µÄÌî³ä²¿·ÖÀ´Ìî³ä¡£ +- **首部长度** : å�  4 ä½�,因此最大值为 15。值为 1 表示的是 1 个 32 ä½�字的长度,也就是 4 字节。因为首部固定长度为 20 字节,因此该值最å°�为 5。如果å�¯é€‰éƒ¨åˆ†çš„长度ä¸�是 4 字节的整数å€�,就用尾部的填充部分æ�¥å¡«å……。 -- **Çø·Ö·þÎñ** : ÓÃÀ´»ñµÃ¸üºÃµÄ·þÎñ£¬Ò»°ãÇé¿öϲ»Ê¹Óᣠ+- **区分æœ�务** : 用æ�¥èŽ·å¾—æ›´å¥½çš„æœ�务,一般情况下ä¸�使用。 -- **×ܳ¤¶È** : °üÀ¨Êײ¿³¤¶ÈºÍÊý¾Ý²¿·Ö³¤¶È¡£ +- **总长度** : 包括首部长度和数æ�®éƒ¨åˆ†é•¿åº¦ã€‚ -- **±êʶ** : ÔÚÊý¾Ý±¨³¤¶È¹ý³¤´Ó¶ø·¢Éú·ÖƬµÄÇé¿öÏ£¬ÏàͬÊý¾Ý±¨µÄ²»Í¬·ÖƬ¾ßÓÐÏàͬµÄ±êʶ·û¡£ +- **标识** : 在数æ�®æŠ¥é•¿åº¦è¿‡é•¿ä»Žè€Œå�‘生分片的情况下,相å�Œæ•°æ�®æŠ¥çš„ä¸�å�Œåˆ†ç‰‡å…·æœ‰ç›¸å�Œçš„æ ‡è¯†ç¬¦ã€‚ -- **Æ¬Æ«ÒÆ** : ºÍ±êʶ·ûÒ»Æð£¬ÓÃÓÚ·¢Éú·ÖƬµÄÇé¿ö¡£Æ¬Æ«ÒƵĵ¥Î»Îª 8 ×Ö½Ú¡£ +- **片å��ç§»** : 和标识符一起,用于å�‘生分片的情况。片å��移的å�•ä½�为 8 字节。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/45c86855-9b18-4cf4-a9a7-f8b6eb78d133.png) -- **Éú´æÊ±¼ä** £ºTTL£¬ËüµÄ´æÔÚÊÇΪÁË·ÀÖ¹ÎÞ·¨½»¸¶µÄÊý¾Ý±¨ÔÚ»¥ÁªÍøÖв»¶Ï¶µÈ¦×Ó¡£ÒÔ·ÓÉÆ÷ÌøÊýΪµ¥Î»£¬µ± TTL Ϊ 0 ʱ¾Í¶ªÆúÊý¾Ý±¨¡£ +- **生存时间** :TTL,它的存在是为了防止无法交付的数æ�®æŠ¥åœ¨äº’è�”网中ä¸�断兜圈å­�。以路由器跳数为å�•ä½�,当 TTL 为 0 时就丢弃数æ�®æŠ¥ã€‚ -- **ЭÒé**£ºÖ¸³öЯ´øµÄÊý¾ÝÓ¦¸ÃÉϽ»¸øÄĸöЭÒé½øÐд¦Àí£¬ÀýÈç ICMP¡¢TCP¡¢UDP µÈ¡£ +- **å��è®®**:指出æ�ºå¸¦çš„æ•°æ�®åº”该上交给哪个å��议进行处ç�†ï¼Œä¾‹å¦‚ ICMPã€�TCPã€�UDP 等。 -- **Êײ¿¼ìÑéºÍ**£ºÒòΪÊý¾Ý±¨Ã¿¾­¹ýÒ»¸ö·ÓÉÆ÷£¬¶¼ÒªÖØÐ¼ÆËã¼ìÑéºÍ£¬Òò´Ë¼ìÑéºÍ²»°üº¬Êý¾Ý²¿·Ö¿ÉÒÔ¼õÉÙ¼ÆËãµÄ¹¤×÷Á¿¡£ +- **首部检验和**:因为数æ�®æŠ¥æ¯�ç»�过一个路由器,都è¦�é‡�新计算检验和,因此检验和ä¸�包å�«æ•°æ�®éƒ¨åˆ†å�¯ä»¥å‡�少计算的工作é‡�。 -## IP µØÖ·±àÖ· +## IP 地å�€ç¼–å�€ -IP µØÖ·µÄ±àÖ··½Ê½¾­ÀúÁËÈý¸öÀúÊ·½×¶Î£º +IP 地å�€çš„ç¼–å�€æ–¹å¼�ç»�历了三个历å�²é˜¶æ®µï¼š -1. ·ÖÀࣻ -2. ×ÓÍø»®·Ö£» -3. ÎÞ·ÖÀà¡£ +1. 分类; +2. å­�网划分; +3. 无分类。 -### 1. ·ÖÀà +### 1. 分类 -ÓÉÁ½²¿·Ö×é³É£¬ÍøÂçºÅºÍÖ÷»úºÅ£¬ÆäÖв»Í¬Àà±ð¾ßÓв»Í¬µÄÍøÂçºÅ³¤¶È£¬²¢ÇÒÊǹ̶¨µÄ¡£ +由两部分组æˆ�,网络å�·å’Œä¸»æœºå�·ï¼Œå…¶ä¸­ä¸�å�Œç±»åˆ«å…·æœ‰ä¸�å�Œçš„网络å�·é•¿åº¦ï¼Œå¹¶ä¸”是固定的。 -IP µØÖ· ::= {< ÍøÂçºÅ >, < Ö÷»úºÅ >} +IP 地å�€ ::= {< 网络å�· >, < 主机å�· >} ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/2ddd6132-60be-4a72-9daa-3d9756191f4a.png) -### 2. ×ÓÍø»®·Ö +注æ„�网络IDä¸�能为0,它有特殊的用途,用æ�¥è¡¨ç¤ºæ‰€æœ‰ç½‘段,所以网络ID最å°�为1;网络ID也ä¸�能为127ï¼›127用æ�¥ä½œä¸ºç½‘络回路测试用。所以A类网络网络ID的有效范围是1-126å…±126个网络。 -ͨ¹ýÔÚÍøÂçºÅ×Ö¶ÎÖÐÄÃÒ»²¿·Ö×÷Ϊ×ÓÍøºÅ£¬°ÑÁ½¼¶ IP µØÖ·»®·ÖΪÈý¼¶ IP µØÖ·¡£×¢Ò⣬Íâ²¿ÍøÂç¿´²»µ½×ÓÍøµÄ´æÔÚ¡£ +主机å�·ä¸�能全是0,ä¸�能全是1,有特殊用途。 -IP µØÖ· ::= {< ÍøÂçºÅ >, < ×ÓÍøºÅ >, < Ö÷»úºÅ >} +### 2. å­�网划分 -ҪʹÓÃ×ÓÍø£¬±ØÐëÅäÖÃ×ÓÍøÑÚÂë¡£Ò»¸ö B ÀàµØÖ·µÄĬÈÏ×ÓÍøÑÚÂëΪ 255.255.0.0£¬Èç¹û B ÀàµØÖ·µÄ×ÓÍøÕ¼Á½¸ö±ÈÌØ£¬ÄÇô×ÓÍøÑÚÂëΪ 11111111 11111111 11000000 000000£¬Ò²¾ÍÊÇ 255.255.192.0¡£ +通过在网络å�·å­—段中拿一部分作为å­�网å�·ï¼ŒæŠŠä¸¤çº§ IP 地å�€åˆ’分为三级 IP 地å�€ã€‚注æ„�,外部网络看ä¸�到å­�网的存在。 -### 3. ÎÞ·ÖÀà +IP 地å�€ ::= {< 网络å�· >, < å­�网å�· >, < 主机å�· >} -ÎÞ·ÖÀà±àÖ· CIDR Ïû³ýÁË´«Í³ A Àà¡¢B ÀàºÍ C ÀàµØÖ·ÒÔ¼°»®·Ö×ÓÍøµÄ¸ÅÄʹÓÃÍøÂçǰ׺ºÍÖ÷»úºÅÀ´¶Ô IP µØÖ·½øÐбàÂë£¬ÍøÂçǰ׺µÄ³¤¶È¿ÉÒÔ¸ù¾ÝÐèÒª±ä»¯¡£ +è¦�使用å­�网,必须é…�ç½®å­�网掩ç �。一个 B 类地å�€çš„默认å­�网掩ç �为 255.255.0.0,如果 B 类地å�€çš„å­�网å� ä¸¤ä¸ªæ¯”特,那么å­�网掩ç �为 11111111 11111111 11000000 000000,也就是 255.255.192.0。 -IP µØÖ· ::= {< ÍøÂçǰ׺ºÅ >, < Ö÷»úºÅ >} +### 3. 无分类 -CIDR µÄ¼Ç·¨ÉϲÉÓÃÔÚ IP µØÖ·ºóÃæ¼ÓÉÏÍøÂçǰ׺³¤¶ÈµÄ·½·¨£¬ÀýÈç 128.14.35.7/20 ±íʾǰ 20 Î»ÎªÍøÂçǰ׺¡£ +无分类编å�€ CIDR 消除了传统 A ç±»ã€�B 类和 C 类地å�€ä»¥å�Šåˆ’分å­�网的概念,使用网络å‰�缀和主机å�·æ�¥å¯¹ IP 地å�€è¿›è¡Œç¼–ç �,网络å‰�缀的长度å�¯ä»¥æ ¹æ�®éœ€è¦�å�˜åŒ–。 -CIDR µÄµØÖ·ÑÚÂë¿ÉÒÔ¼ÌÐø³ÆÎª×ÓÍøÑÚÂ룬×ÓÍøÑÚÂëÊ× 1 ³¤¶ÈÎªÍøÂçǰ׺µÄ³¤¶È¡£ +IP 地å�€ ::= {< 网络å‰�ç¼€å�· >, < 主机å�· >} -Ò»¸ö CIDR µØÖ·¿éÖÐÓÐºÜ¶àµØÖ·£¬Ò»¸ö CIDR ±íʾµÄÍøÂç¾Í¿ÉÒÔ±íʾԭÀ´µÄºÜ¶à¸öÍøÂ磬²¢ÇÒÔÚ·ÓɱíÖÐÖ»ÐèÒªÒ»¸ö·ÓɾͿÉÒÔ´úÌæÔ­À´µÄ¶à¸ö·ÓÉ£¬¼õÉÙÁË·ÓɱíÏîµÄÊýÁ¿¡£°ÑÕâÖÖͨ¹ýʹÓÃÍøÂçǰ׺À´¼õÉÙ·ÓɱíÏîµÄ·½Ê½³ÆÎªÂ·Óɾۺϣ¬Ò²³ÆÎª **¹¹³É³¬Íø**¡£ +CIDR 的记法上采用在 IP 地å�€å�Žé�¢åŠ ä¸Šç½‘ç»œå‰�缀长度的方法,例如 128.14.35.7/20 表示å‰� 20 ä½�为网络å‰�缀。 -ÔÚ·ÓɱíÖеÄÏîÄ¿ÓÉ¡°ÍøÂçǰ׺¡±ºÍ¡°ÏÂÒ»ÌøµØÖ·¡±×é³É£¬ÔÚ²éÕÒʱ¿ÉÄÜ»áµÃµ½²»Ö¹Ò»¸öÆ¥Åä½á¹û£¬Ó¦µ±²ÉÓÃ×ǰ׺ƥÅäÀ´È·¶¨Ó¦¸ÃÆ¥ÅäÄÄÒ»¸ö¡£ +CIDR 的地å�€æŽ©ç �å�¯ä»¥ç»§ç»­ç§°ä¸ºå­�网掩ç �,å­�网掩ç �首 1 长度为网络å‰�缀的长度。 -## IP µØÖ·ºÍ MAC µØÖ· +一个 CIDR 地å�€å�—中有很多地å�€ï¼Œä¸€ä¸ª CIDR 表示的网络就å�¯ä»¥è¡¨ç¤ºåŽŸæ�¥çš„很多个网络,并且在路由表中å�ªéœ€è¦�一个路由就å�¯ä»¥ä»£æ›¿åŽŸæ�¥çš„多个路由,å‡�少了路由表项的数é‡�。把这ç§�通过使用网络å‰�ç¼€æ�¥å‡�少路由表项的方å¼�称为路由è�šå�ˆï¼Œä¹Ÿç§°ä¸º **æž„æˆ�超网**。 -ÍøÂç²ãʵÏÖÖ÷»úÖ®¼äµÄͨÐÅ£¬¶øÁ´Â·²ãʵÏÖ¾ßÌåÿ¶ÎÁ´Â·Ö®¼äµÄͨÐÅ¡£Òò´ËÔÚͨÐŹý³ÌÖУ¬IP Êý¾Ý±¨µÄÔ´µØÖ·ºÍÄ¿µÄµØÖ·Ê¼ÖÕ²»±ä£¬¶ø MAC µØÖ·Ëæ×ÅÁ´Â·µÄ¸Ä±ä¶ø¸Ä±ä¡£ +在路由表中的项目由“网络å‰�ç¼€â€�和“下一跳地å�€â€�组æˆ�,在查找时å�¯èƒ½ä¼šå¾—到ä¸�止一个匹é…�结果,应当采用最长å‰�缀匹é…�æ�¥ç¡®å®šåº”该匹é…�哪一个。 + +**å­�网掩ç �和广播地å�€ï¼š** + +1个ipå­�网掩ç �的网络ä½�å…¨1,主机ä½�全为0。广播地å�€çš„主机ä½�å…¨1,网络ä½�å’Œip一样 + + +## IP 地å�€å’Œ MAC 地å�€ + +ipv4 32ä½�. + +ipv6 128ä½�:分割。 8组4ä½�16进制数 + +MAC 48ä½� + +网络层实现主机之间的通信,而链路层实现具体æ¯�段链路之间的通信。因此在通信过程中,IP æ•°æ�®æŠ¥çš„æº�地å�€å’Œç›®çš„地å�€å§‹ç»ˆä¸�å�˜ï¼Œè€Œ MAC 地å�€éš�ç�€é“¾è·¯çš„æ”¹å�˜è€Œæ”¹å�˜ã€‚ ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/86b71296-0d1e-4a63-bcd9-54955b6b781b.jpg) -## µØÖ·½âÎöЭÒé ARP +## 地å�€è§£æž�å��è®® ARP -ʵÏÖÓÉ IP µØÖ·µÃµ½ MAC µØÖ·¡£ +实现由 IP 地å�€å¾—到 MAC 地å�€ã€‚ -ÿ¸öÖ÷»ú¶¼ÓÐÒ»¸ö ARP ¸ßËÙ»º´æ£¬´æ·ÅÓ³Éä±í¡£Èç¹ûÒ»¸ö IP µØÖ·µ½ MAC µØÖ·µÄÓ³Éä²»ÔڸñíÖУ¬Ö÷»úͨ¹ý¹ã²¥µÄ·½Ê½·¢ËÍ ARP ÇëÇó·Ö×飬ƥÅä IP µØÖ·µÄÖ÷»ú»á·¢ËÍ ARP ÏìÓ¦·Ö×é¸æÖªÆä MAC µØÖ·¡£ +æ¯�个主机都有一个 ARP 高速缓存,存放映射表。如果一个 IP 地å�€åˆ° MAC 地å�€çš„æ˜ å°„ä¸�在该表中,主机通过广播的方å¼�å�‘é€� ARP 请求分组,匹é…� IP 地å�€çš„主机会å�‘é€� ARP å“�应分组告知其 MAC 地å�€ã€‚ ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/8bc6fc2c-d198-4759-b06c-18d94d851e97.png) -## ·ÓÉÆ÷µÄ½á¹¹ +## 路由器的结构 -·ÓÉÆ÷´Ó¹¦ÄÜÉÏ¿ÉÒÔ»®·ÖΪÁ½´ó²¿·Ö£ºÂ·ÓÉÑ¡ÔñºÍ·Ö×éת·¢¡£ +路由器从功能上å�¯ä»¥åˆ’分为两大部分:路由选择和分组转å�‘。 -·Ö×éת·¢²¿·ÖÓÉÈý²¿·Ö×é³É£º½»»»½á¹¹¡¢Ò»×éÊäÈë¶Ë¿ÚºÍÒ»×éÊä³ö¶Ë¿Ú¡£ +forwarding å�•一路由器从一æ�¡é“¾æŽ¥æ”¶æ•°æ�®ä»Žå�¦ä¸€æ�¡é“¾å‡ºåŽ» + +routing 从æº�到目的的众多路由中选择一æ�¡è·¯å¾„ + +分组转å�‘部分由三部分组æˆ�:交æ�¢ç»“æž„ã€�一组输入端å�£å’Œä¸€ç»„输出端å�£ã€‚ ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/3a676c54-b559-4466-9b21-eb10f1e25879.jpg) -½»»»½á¹¹µÄ½»»»ÍøÂçÓÐÒÔÏÂÈýÖÖʵÏÖ·½Ê½£º +交æ�¢ç»“构的交æ�¢ç½‘络有以下三ç§�实现方å¼�: ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/7f82fd18-7f16-4125-ada6-bb6b795b4fda.png) -## ½»»»»úÓë·ÓÉÆ÷µÄÇø±ð +## 交æ�¢æœºä¸Žè·¯ç”±å™¨çš„区别 -- ½»»»»ú¹¤×÷ÓÚÊý¾ÝÁ´Â·²ã£¬ÄÜʶ±ð MAC µØÖ·£¬¸ù¾Ý MAC µØÖ·×ª·¢Á´Â·²ãÊý¾ÝÖ¡¡£¾ßÓÐ×Ôѧ»úÖÆÀ´Î¬»¤ IP µØÖ·Óë MAC µØÖ·µÄÓ³Éä¡£ -- ·ÓÉÆ÷λÓÚÍøÂç²ã£¬ÄÜʶ±ð IP µØÖ·²¢¸ù¾Ý IP µØÖ·×ª·¢·Ö×顣ά»¤×Å·ÓÉ±í£¬¸ù¾Ý·ÓɱíÑ¡Ôñ×î¼Ñ·Ïß¡£ +- 交æ�¢æœºå·¥ä½œäºŽæ•°æ�®é“¾è·¯å±‚,能识别 MAC 地å�€ï¼Œæ ¹æ�® MAC 地å�€è½¬å�‘链路层数æ�®å¸§ã€‚具有自学机制æ�¥ç»´æŠ¤ IP 地å�€ä¸Ž MAC 地å�€çš„æ˜ å°„。 +- 路由器ä½�于网络层,能识别 IP 地å�€å¹¶æ ¹æ�® IP 地å�€è½¬å�‘分组。维护ç�€è·¯ç”±è¡¨ï¼Œæ ¹æ�®è·¯ç”±è¡¨é€‰æ‹©æœ€ä½³è·¯çº¿ã€‚ -## ·ÓÉÆ÷·Ö×éת·¢Á÷³Ì +## 路由器分组转å�‘æµ�程 -1. ´ÓÊý¾Ý±¨µÄÊײ¿ÌáȡĿµÄÖ÷»úµÄ IP µØÖ· D£¬µÃµ½Ä¿µÄÍøÂçµØÖ· N¡££¨Â·ÓɱíÏîÊÇÍøÂçºÅ¶ø²»ÊÇ IP µØÖ·£¬ÕâÑù×ö´ó´ó¼õÉÙÁË·ÓɱíÌõÄ¿ÊýÁ¿£© -2. Èô N ¾ÍÊÇÓë´Ë·ÓÉÆ÷Ö±½ÓÏàÁ¬µÄij¸öÍøÂçµØÖ·£¬Ôò½øÐÐÖ±½Ó½»¸¶£» -3. Èô·ÓɱíÖÐÓÐÄ¿µÄµØÖ·Îª D µÄÌØ¶¨Ö÷»ú·ÓÉ£¬Ôò°ÑÊý¾Ý±¨´«Ë͸ø±íÖÐËùÖ¸Ã÷µÄÏÂÒ»ÌøÂ·ÓÉÆ÷£» -4. Èô·ÓɱíÖÐÓе½´ïÍøÂç N µÄ·ÓÉ£¬Ôò°ÑÊý¾Ý±¨´«Ë͸øÂ·ÓɱíÖÐËùÖ¸Ã÷µÄÏÂÒ»ÌøÂ·ÓÉÆ÷£» -5. Èô·ÓɱíÖÐÓÐÒ»¸öĬÈÏ·ÓÉ£¬Ôò°ÑÊý¾Ý±¨´«Ë͸øÂ·ÓɱíÖÐËùÖ¸Ã÷µÄĬÈÏ·ÓÉÆ÷£» -6. ±¨¸æ×ª·¢·Ö×é³ö´í¡£ +1. 从数æ�®æŠ¥çš„首部æ��å�–目的主机的 IP 地å�€ D,得到目的网络地å�€ N。(路由表项是网络å�·è€Œä¸�是 IP 地å�€ï¼Œè¿™æ ·å�šå¤§å¤§å‡�少了路由表æ�¡ç›®æ•°é‡�) +2. è‹¥ N 就是与此路由器直接相连的æŸ�个网络地å�€ï¼Œåˆ™è¿›è¡Œç›´æŽ¥äº¤ä»˜ï¼› +3. 若路由表中有目的地å�€ä¸º D 的特定主机路由,则把数æ�®æŠ¥ä¼ é€�给表中所指明的下一跳路由器; +4. 若路由表中有到达网络 N 的路由,则把数æ�®æŠ¥ä¼ é€�给路由表中所指明的下一跳路由器; +5. 若路由表中有一个默认路由,则把数æ�®æŠ¥ä¼ é€�给路由表中所指明的默认路由器; +6. 报告转å�‘分组出错。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/8d211911-0e62-4190-ab00-d8610adec4a0.jpg) -## ·ÓÉÑ¡ÔñЭÒé +## 路由选择å��è®® -»¥ÁªÍøÊ¹ÓõÄ·ÓÉÑ¡ÔñЭÒé¶¼ÊÇ×ÔÊÊÓ¦µÄ£¬ÄÜËæ×ÅÍøÂçͨÐÅÁ¿ºÍÍØÆË½á¹¹µÄ±ä»¯¶ø×ÔÊÊÓ¦µØ½øÐе÷Õû¡£ +互è�”网使用的路由选择å��议都是自适应的,能éš�ç�€ç½‘络通信é‡�和拓扑结构的å�˜åŒ–而自适应地进行调整。 -»¥ÁªÍø¿ÉÒÔ»®·ÖΪÐí¶à½ÏСµÄ×ÔÖÎϵͳ AS£¬Ò»¸ö AS ¿ÉÒÔʹÓÃÒ»ÖֺͱðµÄ AS ²»Í¬µÄ·ÓÉÑ¡ÔñЭÒé¡£ +互è�”网å�¯ä»¥åˆ’分为许多较å°�的自治系统 AS,一个 AS å�¯ä»¥ä½¿ç”¨ä¸€ç§�和别的 AS ä¸�å�Œçš„路由选择å��议。 -¿ÉÒÔ°Ñ·ÓÉÑ¡ÔñЭÒé»®·ÖΪÁ½´óÀࣺ +å�¯ä»¥æŠŠè·¯ç”±é€‰æ‹©å��议划分为两大类: -1. ÄÚ²¿Íø¹ØÐ­Òé IGP£¨Interior Gateway Protocol£©£ºÔÚ AS ÄÚ²¿Ê¹Óã¬Èç RIP ºÍ OSPF¡£ -2. Íâ²¿Íø¹ØÐ­Òé EGP£¨External Gateway Protocol£©£ºÔÚ AS Ö®¼äʹÓã¬Èç BGP¡£ +1. 内部网关å��è®® IGP(Interior Gateway Protocol):在 AS 内部使用,如 RIP å’Œ OSPF。 +2. 外部网关å��è®® EGP(External Gateway Protocol):在 AS 之间使用,如 BGP。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/e0be6970-5b0e-44a2-bc71-df4d61c42b8f.jpg) -### 1. ÄÚ²¿Íø¹ØÐ­Òé RIP +### 1. 内部网关å��è®® RIP -RIP ÊÇÒ»ÖÖ·Ö²¼Ê½µÄ»ùÓÚ¾àÀëÏòÁ¿µÄ·ÓÉÑ¡ÔñЭÒé¡£¾àÀëÊÇÖ¸ÌøÊý£¬Ö±½ÓÏàÁ¬µÄ·ÓÉÆ÷ÌøÊýΪ 1£¬ÌøÊý×î¶àΪ 15£¬³¬¹ý 15 ±íʾ²»¿É´ï¡£ +RIP 是一ç§�分布å¼�的基于è·�离å�‘é‡�的路由选择å��议。è·�离是指跳数,直接相连的路由器跳数为 1,跳数最多为 15,超过 15 表示ä¸�å�¯è¾¾ã€‚ -RIP °´¹Ì¶¨µÄʱ¼ä¼ä¸ô½öºÍÏàÁÚ·ÓÉÆ÷½»»»×Ô¼ºµÄ·ÓÉ±í£¬¾­¹ýÈô¸É´Î½»»»Ö®ºó£¬ËùÓзÓÉÆ÷×îÖÕ»áÖªµÀµ½´ï±¾×ÔÖÎϵͳÖÐÈκÎÒ»¸öÍøÂçµÄ×î¶Ì¾àÀëºÍÏÂÒ»ÌøÂ·ÓÉÆ÷µØÖ·¡£ +RIP 按固定的时间间隔仅和相邻路由器交æ�¢è‡ªå·±çš„路由表,ç»�过若干次交æ�¢ä¹‹å�Žï¼Œæ‰€æœ‰è·¯ç”±å™¨æœ€ç»ˆä¼šçŸ¥é�“到达本自治系统中任何一个网络的最短è·�离和下一跳路由器地å�€ã€‚ -¾àÀëÏòÁ¿Ëã·¨£º +è·�离å�‘é‡�算法: -1. ¶ÔµØÖ·Îª X µÄÏàÁÚ·ÓÉÆ÷·¢À´µÄ RIP ±¨ÎÄ£¬ÏÈÐ޸ı¨ÎÄÖеÄËùÓÐÏîÄ¿£¬°ÑÏÂÒ»Ìø×Ö¶ÎÖеĵØÖ·¸ÄΪ X£¬²¢°ÑËùÓеľàÀë×Ö¶Î¼Ó 1£» -2. ¶ÔÐ޸ĺóµÄ RIP ±¨ÎÄÖеÄÿһ¸öÏîÄ¿£¬½øÐÐÒÔϲ½Ö裺 - - ÈôÔ­À´µÄ·ÓɱíÖÐûÓÐÄ¿µÄÍøÂç N£¬Ôò°Ñ¸ÃÏîÄ¿Ìí¼Óµ½Â·ÓɱíÖУ» - - ·ñÔò£ºÈôÏÂÒ»ÌøÂ·ÓÉÆ÷µØÖ·ÊÇ X£¬Ôò°ÑÊÕµ½µÄÏîÄ¿Ìæ»»Ô­À´Â·ÓɱíÖеÄÏîÄ¿£»·ñÔò£ºÈôÊÕµ½µÄÏîÄ¿ÖеľàÀë d СÓÚ·ÓɱíÖеľàÀ룬Ôò½øÐиüУ¨ÀýÈçԭʼ·ÓɱíÏîΪ Net2, 5, P£¬Ð±íÏîΪ Net2, 4, X£¬Ôò¸üУ©£»·ñÔòʲôҲ²»×ö¡£ -3. Èô 3 ·ÖÖÓ»¹Ã»ÓÐÊÕµ½ÏàÁÚ·ÓÉÆ÷µÄ¸üзÓÉ±í£¬Ôò°Ñ¸ÃÏàÁÚ·ÓÉÆ÷±êΪ²»¿É´ï£¬¼´°Ñ¾àÀëÖÃΪ 16¡£ +1. 对地å�€ä¸º X 的相邻路由器å�‘æ�¥çš„ RIP 报文,先修改报文中的所有项目,把下一跳字段中的地å�€æ”¹ä¸º X,并把所有的è·�离字段加 1ï¼› +2. 对修改å�Žçš„ RIP 报文中的æ¯�一个项目,进行以下步骤: + - 若原æ�¥çš„路由表中没有目的网络 N,则把该项目添加到路由表中; + - å�¦åˆ™ï¼šè‹¥ä¸‹ä¸€è·³è·¯ç”±å™¨åœ°å�€æ˜¯ X,则把收到的项目替æ�¢åŽŸæ�¥è·¯ç”±è¡¨ä¸­çš„项目;å�¦åˆ™ï¼šè‹¥æ”¶åˆ°çš„项目中的è·�离 d å°�于路由表中的è·�离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新);å�¦åˆ™ä»€ä¹ˆä¹Ÿä¸�å�šã€‚ +3. è‹¥ 3 分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为ä¸�å�¯è¾¾ï¼Œå�³æŠŠè·�离置为 16。 -RIP ЭÒéʵÏÖ¼òµ¥£¬¿ªÏúС£¬µ«ÊÇ RIP ÄÜʹÓõÄ×î´ó¾àÀëΪ 15£¬ÏÞÖÆÁËÍøÂçµÄ¹æÄ£¡£²¢ÇÒµ±ÍøÂç³öÏÖ¹ÊÕÏʱ£¬Òª¾­¹ý±È½Ï³¤µÄʱ¼ä²ÅÄܽ«´ËÏûÏ¢´«Ë͵½ËùÓзÓÉÆ÷¡£ +RIP å��议实现简å�•,开销å°�,但是 RIP 能使用的最大è·�离为 15,é™�制了网络的规模。并且当网络出现故障时,è¦�ç»�过比较长的时间æ‰�能将此消æ�¯ä¼ é€�到所有路由器。 -### 2. ÄÚ²¿Íø¹ØÐ­Òé OSPF -¿ª·Å×î¶Ì·¾¶ÓÅÏÈ OSPF£¬ÊÇΪÁ˿˷þ RIP µÄȱµã¶ø¿ª·¢³öÀ´µÄ¡£ +当è·�离改å�˜æ—¶ï¼Œå�¯èƒ½å‡ºçŽ°é€‰æ‹©é—­çŽ¯ã€‚ -¿ª·Å±íʾ OSPF ²»ÊÜijһ¼Ò³§ÉÌ¿ØÖÆ£¬¶øÊǹ«¿ª·¢±íµÄ£»×î¶Ì·¾¶ÓÅÏȱíʾʹÓÃÁË Dijkstra Ìá³öµÄ×î¶Ì·¾¶Ëã·¨ SPF¡£ +解决方法:毒性逆转 å�³å°†ç›´æŽ¥ç›¸è¿žçš„è¾¹æ�ƒä¸”此边æ�ƒé�žæœ€å°�费用置为无穷大 -OSPF ¾ßÓÐÒÔÏÂÌØµã£º +### 2. 内部网关å��è®® OSPF -- Ïò±¾×ÔÖÎϵͳÖеÄËùÓзÓÉÆ÷·¢ËÍÐÅÏ¢£¬ÕâÖÖ·½·¨ÊǺ鷺·¨¡£ -- ·¢Ë͵ÄÐÅÏ¢¾ÍÊÇÓëÏàÁÚ·ÓÉÆ÷µÄÁ´Â·×´Ì¬£¬Á´Â·×´Ì¬°üÀ¨ÓëÄÄЩ·ÓÉÆ÷ÏàÁ¬ÒÔ¼°Á´Â·µÄ¶ÈÁ¿£¬¶ÈÁ¿Ó÷ÑÓᢾàÀ롢ʱÑÓ¡¢´ø¿íµÈÀ´±íʾ¡£ -- Ö»Óе±Á´Â·×´Ì¬·¢Éú±ä»¯Ê±£¬Â·ÓÉÆ÷²Å»á·¢ËÍÐÅÏ¢¡£ +开放最短路径优先 OSPF,是为了克æœ� RIP 的缺点而开å�‘出æ�¥çš„。 -ËùÓзÓÉÆ÷¶¼¾ßÓÐÈ«ÍøµÄÍØÆË½á¹¹Í¼£¬²¢ÇÒÊÇÒ»Öµġ£Ïà±ÈÓÚ RIP£¬OSPF µÄ¸üйý³ÌÊÕÁ²µÄºÜ¿ì¡£ +开放表示 OSPF ä¸�å�—æŸ�一家厂商控制,而是公开å�‘表的;最短路径优先表示使用了 Dijkstra æ��出的最短路径算法 SPF。 -### 3. Íâ²¿Íø¹ØÐ­Òé BGP +OSPF 具有以下特点: -AS Ö®¼äµÄ·ÓÉÑ¡ÔñºÜÀ§ÄÑ£¬Ö÷ÒªÊÇ»¥ÁªÍø¹æÄ£ºÜ´ó¡£²¢ÇÒ¸÷¸ö AS ÄÚ²¿Ê¹Óò»Í¬µÄ·ÓÉÑ¡ÔñЭÒ飬¾ÍÎÞ·¨×¼È·¶¨Òå·¾¶µÄ¶ÈÁ¿¡£²¢ÇÒ AS Ö®¼äµÄ·ÓÉÑ¡Ôñ±ØÐ뿼ÂÇÓйصIJßÂÔ£¬±ÈÈçÓÐЩ AS ²»Ô¸ÒâÈÃÆäËü AS ¾­¹ý¡£ +- å�‘本自治系统中的所有路由器å�‘é€�ä¿¡æ�¯ï¼Œè¿™ç§�方法是洪泛法。 +- å�‘é€�的信æ�¯å°±æ˜¯ä¸Žç›¸é‚»è·¯ç”±å™¨çš„链路状æ€�,链路状æ€�包括与哪些路由器相连以å�Šé“¾è·¯çš„度é‡�,度é‡�用费用ã€�è·�离ã€�æ—¶å»¶ã€�带宽等æ�¥è¡¨ç¤ºã€‚ +- å�ªæœ‰å½“链路状æ€�å�‘生å�˜åŒ–时,路由器æ‰�会å�‘é€�ä¿¡æ�¯ã€‚ -BGP Ö»ÄÜѰÕÒÒ»Ìõ±È½ÏºÃµÄ·ÓÉ£¬¶ø²»ÊÇ×î¼Ñ·ÓÉ¡£Ëü²ÉÓ÷¾¶ÏòÁ¿Â·ÓÉÑ¡ÔñЭÒé¡£ +所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。 -ÿ¸ö AS ¶¼±ØÐëÅäÖà BGP ·¢ÑÔÈË£¬Í¨¹ýÔÚÁ½¸öÏàÁÚ BGP ·¢ÑÔÈËÖ®¼ä½¨Á¢ TCP Á¬½ÓÀ´½»»»Â·ÓÉÐÅÏ¢¡£ +### 3. 外部网关å��è®® BGP + +AS 之间的路由选择很困难,主è¦�是互è�”网规模很大。并且å�„个 AS 内部使用ä¸�å�Œçš„路由选择å��议,就无法准确定义路径的度é‡�。并且 AS 之间的路由选择必须考虑有关的策略,比如有些 AS ä¸�æ„¿æ„�让其它 AS ç»�过。 + +BGP å�ªèƒ½å¯»æ‰¾ä¸€æ�¡æ¯”较好的路由,而ä¸�是最佳路由。它采用路径å�‘é‡�路由选择å��议。 + +æ¯�个 AS 都必须é…�ç½® BGP å�‘言人,通过在两个相邻 BGP å�‘言人之间建立 TCP 连接æ�¥äº¤æ�¢è·¯ç”±ä¿¡æ�¯ã€‚ ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/eb6271de-22c9-4f4b-8b31-eab1f560efac.png) -## Íø¼Ê¿ØÖƱ¨ÎÄЭÒé ICMP +## 网际控制报文å��è®® ICMP -ICMP ÊÇΪÁ˸üÓÐЧµØ×ª·¢ IP Êý¾Ý±¨ºÍÌá¸ß½»¸¶³É¹¦µÄ»ú»á¡£Ëü·â×°ÔÚ IP Êý¾Ý±¨ÖУ¬µ«ÊDz»ÊôÓڸ߲ãЭÒé¡£ +ICMP 是为了更有效地转å�‘ IP æ•°æ�®æŠ¥å’Œæ��高交付æˆ�功的机会。它å°�装在 IP æ•°æ�®æŠ¥ä¸­ï¼Œä½†æ˜¯ä¸�属于高层å��议。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/9b5e0fa0-9274-4219-a3a9-84fbb509c735.jpg) -ICMP ±¨ÎÄ·ÖΪ²î´í±¨¸æ±¨ÎĺÍѯÎʱ¨ÎÄ¡£ +ICMP 报文分为差错报告报文和询问报文。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/6e11b122-95ce-4869-bf7d-3b0d7591707e.jpg) -## ·Ö×éÍø¼ä̽²â PING +## 分组网间探测 PING -PING ÊÇ ICMP µÄÒ»¸öÖØÒªÓ¦Óã¬Ö÷ÒªÓÃÀ´²âÊÔÁ½Ì¨Ö÷»úÖ®¼äµÄÁ¬Í¨ÐÔ¡£ +PING 是 ICMP 的一个é‡�è¦�应用,主è¦�用æ�¥æµ‹è¯•两å�°ä¸»æœºä¹‹é—´çš„连通性。 -PING µÄ¹ý³Ì£º +PING 的过程: -1. PING ͬһ¸öÍø¶ÎµÄÖ÷»ú£º²éÕÒÄ¿µÄÖ÷»úµÄ MAC µØÖ·£¬È»ºóÖ±½Ó½»¸¶¡£Èç¹ûÎÞ·¨²éÕÒµ½ MAC µØÖ·£¬¾ÍÒª½øÐÐÒ»´Î ARP ÇëÇó¡£ -2. PING ²»Í¬Íø¶ÎµÄÖ÷»ú£º·¢Ë͵½Íø¹ØÈÃÆä½øÐÐת·¢¡£Í¬ÑùÒª·¢Ë͵½Íø¹ØÒ²ÐèҪͨ¹ý²éÕÒÍø¹ØµÄ MAC µØÖ·£¬¸ù¾Ý MAC µØÖ·½øÐÐת·¢¡£ +1. PING å�Œä¸€ä¸ªç½‘段的主机:查找目的主机的 MAC 地å�€ï¼Œç„¶å�Žç›´æŽ¥äº¤ä»˜ã€‚如果无法查找到 MAC 地å�€ï¼Œå°±è¦�进行一次 ARP 请求。 +2. PING ä¸�å�Œç½‘段的主机:å�‘é€�到网关让其进行转å�‘。å�Œæ ·è¦�å�‘é€�到网关也需è¦�通过查找网关的 MAC 地å�€ï¼Œæ ¹æ�® MAC 地å�€è¿›è¡Œè½¬å�‘。 -## IP ¶à²¥ +## IP 多播 -ÔÚÒ»¶Ô¶àµÄͨÐÅÖУ¬¶à²¥²»ÐèÒª½«·Ö×鏴֯¶à·Ý£¬´Ó¶ø´ó´ó½ÚÔ¼ÍøÂç×ÊÔ´¡£ +在一对多的通信中,多播ä¸�需è¦�将分组å¤�制多份,从而大大节约网络资æº�。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/c77b6a18-dfac-42a2-ac89-7e99481275dc.jpg) -## ÐéÄâרÓÃÍø VPN +## 虚拟专用网 VPN -ÓÉÓÚ IP µØÖ·µÄ½ôȱ£¬Ò»¸ö»ú¹¹ÄÜÉêÇëµ½µÄ IP µØÖ·ÊýÍùÍùԶСÓÚ±¾»ú¹¹ËùÓµÓеÄÖ÷»úÊý¡£²¢ÇÒÒ»¸ö»ú¹¹²¢²»ÐèÒª°ÑËùÓеÄÖ÷»ú½ÓÈëµ½ÍⲿµÄ»¥ÁªÍøÖУ¬»ú¹¹ÄڵļÆËã»ú¿ÉÒÔʹÓýöÔÚ±¾»ú¹¹ÓÐЧµÄ IP µØÖ·£¨×¨ÓõØÖ·£©¡£ +由于 IP 地å�€çš„紧缺,一个机构能申请到的 IP 地å�€æ•°å¾€å¾€è¿œå°�于本机构所拥有的主机数。并且一个机构并ä¸�需è¦�把所有的主机接入到外部的互è�”网中,机构内的计算机å�¯ä»¥ä½¿ç”¨ä»…在本机构有效的 IP 地å�€ï¼ˆä¸“用地å�€ï¼‰ã€‚ -ÓÐÈý¸öרÓõØÖ·¿é£º +有三个专用地å�€å�—: 1. 10.0.0.0 \~ 10.255.255.255 2. 172.16.0.0 \~ 172.31.255.255 3. 192.168.0.0 \~ 192.168.255.255 -VPN ʹÓù«ÓõĻ¥ÁªÍø×÷Ϊ±¾»ú¹¹¸÷רÓÃÍøÖ®¼äµÄͨÐÅÔØÌ塣רÓÃÖ¸»ú¹¹ÄÚµÄÖ÷»úÖ»Óë±¾»ú¹¹Ä򵀮äËüÖ÷»úͨÐÅ£»ÐéÄâÖ¸¡°ºÃÏñÊÇ¡±£¬¶øÊµ¼ÊÉϲ¢²»ÊÇ£¬ËüÓо­¹ý¹«ÓõĻ¥ÁªÍø¡£ +VPN 使用公用的互è�”网作为本机构å�„专用网之间的通信载体。专用指机构内的主机å�ªä¸Žæœ¬æœºæž„内的其它主机通信;虚拟指“好åƒ�是â€�,而实际上并ä¸�是,它有ç»�过公用的互è�”网。 -ÏÂͼÖУ¬³¡Ëù A ºÍ B µÄͨÐŲ¿¾­¹ý»¥ÁªÍø£¬Èç¹û³¡Ëù A µÄÖ÷»ú X ÒªºÍÁíÒ»¸ö³¡Ëù B µÄÖ÷»ú Y ͨÐÅ£¬IP Êý¾Ý±¨µÄÔ´µØÖ·ÊÇ 10.1.0.1£¬Ä¿µÄµØÖ·ÊÇ 10.2.0.3¡£Êý¾Ý±¨ÏÈ·¢Ë͵½Ó뻥ÁªÍøÏàÁ¬µÄ·ÓÉÆ÷ R1£¬R1 ¶ÔÄÚ²¿Êý¾Ý½øÐмÓÃÜ£¬È»ºóÖØÐ¼ÓÉÏÊý¾Ý±¨µÄÊײ¿£¬Ô´µØÖ·ÊÇ·ÓÉÆ÷ R1 µÄÈ«ÇòµØÖ· 125.1.2.3£¬Ä¿µÄµØÖ·ÊÇ·ÓÉÆ÷ R2 µÄÈ«ÇòµØÖ· 194.4.5.6¡£Â·ÓÉÆ÷ R2 ÊÕµ½Êý¾Ý±¨ºó½«Êý¾Ý²¿·Ö½øÐнâÃÜ£¬»Ö¸´Ô­À´µÄÊý¾Ý±¨£¬´ËʱĿµÄµØÖ·Îª 10.2.0.3£¬¾Í½»¸¶¸ø Y¡£ +下图中,场所 A å’Œ B 的通信部ç»�过互è�”网,如果场所 A 的主机 X è¦�å’Œå�¦ä¸€ä¸ªåœºæ‰€ B 的主机 Y 通信,IP æ•°æ�®æŠ¥çš„æº�地å�€æ˜¯ 10.1.0.1,目的地å�€æ˜¯ 10.2.0.3。数æ�®æŠ¥å…ˆå�‘é€�到与互è�”网相连的路由器 R1,R1 对内部数æ�®è¿›è¡ŒåŠ å¯†ï¼Œç„¶å�Žé‡�新加上数æ�®æŠ¥çš„首部,æº�地å�€æ˜¯è·¯ç”±å™¨ R1 的全ç�ƒåœ°å�€ 125.1.2.3,目的地å�€æ˜¯è·¯ç”±å™¨ R2 的全ç�ƒåœ°å�€ 194.4.5.6。路由器 R2 收到数æ�®æŠ¥å�Žå°†æ•°æ�®éƒ¨åˆ†è¿›è¡Œè§£å¯†ï¼Œæ�¢å¤�原æ�¥çš„æ•°æ�®æŠ¥ï¼Œæ­¤æ—¶ç›®çš„地å�€ä¸º 10.2.0.3,就交付给 Y。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/bf4ed077-d481-4db7-9e7a-85d841a5a8c3.jpg) -## ÍøÂçµØÖ·×ª»» NAT +## 网络地å�€è½¬æ�¢ NAT -רÓÃÍøÄÚ²¿µÄÖ÷»úʹÓñ¾µØ IP µØÖ·ÓÖÏëºÍ»¥ÁªÍøÉϵÄÖ÷»úͨÐÅʱ£¬¿ÉÒÔʹÓà NAT À´½«±¾µØ IP ת»»ÎªÈ«Çò IP¡£ +专用网内部的主机使用本地 IP 地å�€å�ˆæƒ³å’Œäº’è�”网上的主机通信时,å�¯ä»¥ä½¿ç”¨ NAT æ�¥å°†æœ¬åœ° IP 转æ�¢ä¸ºå…¨ç�ƒ IP。 -ÔÚÒÔǰ£¬NAT ½«±¾µØ IP ºÍÈ«Çò IP Ò»Ò»¶ÔÓ¦£¬ÕâÖÖ·½Ê½ÏÂÓµÓÐ n ¸öÈ«Çò IP µØÖ·µÄרÓÃÍøÄÚ×î¶àÖ»¿ÉÒÔͬʱÓÐ n ̨Ö÷»ú½ÓÈ뻥ÁªÍø¡£ÎªÁ˸üÓÐЧµØÀûÓÃÈ«Çò IP µØÖ·£¬ÏÖÔÚ³£ÓÃµÄ NAT ת»»±í°ÑÔËÊä²ãµÄ¶Ë¿ÚºÅÒ²ÓÃÉÏÁË£¬Ê¹µÃ¶à¸öרÓÃÍøÄÚ²¿µÄÖ÷»ú¹²ÓÃÒ»¸öÈ«Çò IP µØÖ·¡£Ê¹ÓÃ¶Ë¿ÚºÅµÄ NAT Ò²½Ð×öÍøÂçµØÖ·Óë¶Ë¿Úת»» NAPT¡£ +在以å‰�,NAT 将本地 IP 和全ç�ƒ IP 一一对应,这ç§�æ–¹å¼�下拥有 n 个全ç�ƒ IP 地å�€çš„专用网内最多å�ªå�¯ä»¥å�Œæ—¶æœ‰ n å�°ä¸»æœºæŽ¥å…¥äº’è�”网。为了更有效地利用全ç�ƒ IP 地å�€ï¼ŒçŽ°åœ¨å¸¸ç”¨çš„ NAT 转æ�¢è¡¨æŠŠè¿�输层的端å�£å�·ä¹Ÿç”¨ä¸Šäº†ï¼Œä½¿å¾—多个专用网内部的主机共用一个全ç�ƒ IP 地å�€ã€‚使用端å�£å�·çš„ NAT 也å�«å�šç½‘络地å�€ä¸Žç«¯å�£è½¬æ�¢ NAPT。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/0f31bc7a-d60b-48a6-8e3f-597708369e52.png) -# µÚÎåÕ ÔËÊä²ã* +# 第五章 è¿�输层* -ÍøÂç²ãÖ»°Ñ·Ö×é·¢Ë͵½Ä¿µÄÖ÷»ú£¬µ«ÊÇÕæÕýͨÐŵIJ¢²»ÊÇÖ÷»ú¶øÊÇÖ÷»úÖеĽø³Ì¡£ +网络层å�ªæŠŠåˆ†ç»„å�‘é€�到目的主机,但是真正通信的并ä¸�是主机而是主机中的进程。 -ÔËÊä²ãÌṩÁËÓ¦Óýø³Ì¼äµÄÂß¼­Í¨ÐÅ¡£ÔËÊä²ãÏò¸ß²ãÓû§ÆÁ±ÎÁËÏÂÃæÍøÂç²ãµÄºËÐÄϸ½Ú£¬Ê¹Ó¦ÓóÌÐò¿´¼ûµÄºÃÏñÔÚÁ½¸öÔËÊä²ãʵÌåÖ®¼äÓÐÒ»Ìõ¶Ëµ½¶ËµÄÂß¼­Í¨ÐÅÐŵÀ¡£ +è¿�输层æ��供了应用进程间的逻辑通信。è¿�输层å�‘高层用户å±�蔽了下é�¢ç½‘络层的核心细节,使应用程åº�看è§�的好åƒ�在两个è¿�输层实体之间有一æ�¡ç«¯åˆ°ç«¯çš„逻辑通信信é�“。 -## UDP ºÍ TCP µÄÌØµã +多路分解:将è¿�输层数æ�®æ­£ç¡®å�‘给相对应的进程。 -- Óû§Êý¾Ý°üЭÒé UDP£¨User Datagram Protocol£©ÊÇÎÞÁ¬½ÓµÄ£¬¾¡×î´ó¿ÉÄܽ»¸¶£¬Ã»ÓÐÓµÈû¿ØÖÆ£¬ÃæÏò±¨ÎÄ£¨¶ÔÓÚÓ¦ÓóÌÐò´«ÏÂÀ´µÄ±¨ÎIJ»ºÏ²¢Ò²²»²ð·Ö£¬Ö»ÊÇÌí¼Ó UDP Êײ¿£©¡£ +多路å¤�用:给数æ�®åŠ ä¸Šé¦–éƒ¨ä¿¡æ�¯ï¼Œå½¢æˆ�segment,然å�Žå�‘给网络层。 +## UDP å’Œ TCP 的特点 -- ´«Êä¿ØÖÆÐ­Òé TCP£¨Transmission Control Protocol£© ÊÇÃæÏòÁ¬½ÓµÄ£¬Ìṩ¿É¿¿½»¸¶£¬ÓÐÁ÷Á¿¿ØÖÆ£¬ÓµÈû¿ØÖÆ£¬Ìṩȫ˫¹¤Í¨ÐÅ£¬ÃæÏò×Ö½ÚÁ÷£¨°ÑÓ¦Óò㴫ÏÂÀ´µÄ±¨ÎÄ¿´³É×Ö½ÚÁ÷£¬°Ñ×Ö½ÚÁ÷×éÖ¯³É´óС²»µÈµÄÊý¾Ý¿é£© +- 用户数æ�®åŒ…å��è®® UDP(User Datagram Protocol)是无连接的,尽最大å�¯èƒ½äº¤ä»˜ï¼Œæ²¡æœ‰æ‹¥å¡žæŽ§åˆ¶ï¼Œé�¢å�‘报文(对于应用程åº�传下æ�¥çš„æŠ¥æ–‡ä¸�å�ˆå¹¶ä¹Ÿä¸�拆分,å�ªæ˜¯æ·»åŠ  UDP 首部)。 -## UDP Êײ¿¸ñʽ +- 传输控制å��è®® TCP(Transmission Control Protocol) 是é�¢å�‘连接的,æ��ä¾›å�¯é� äº¤ä»˜ï¼Œæœ‰æµ�é‡�控制,拥塞控制,æ��供全å�Œå·¥é€šä¿¡ï¼Œé�¢å�‘字节æµ�(把应用层传下æ�¥çš„æŠ¥æ–‡çœ‹æˆ�字节æµ�,把字节æµ�组织æˆ�大å°�ä¸�等的数æ�®å�—) + +Since most firewalls are configured to block UDP traffic, using TCP for video and voice traffic lets the traffic though the firewalls. +## UDP 首部格å¼� ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/bd6c05f3-02ee-4c8a-b374-40c87154a898.jpg) -Êײ¿×Ö¶ÎÖ»ÓÐ 8 ¸ö×Ö½Ú£¬°üÀ¨Ô´¶Ë¿Ú¡¢Ä¿µÄ¶Ë¿Ú¡¢³¤¶È¡¢¼ìÑéºÍ¡£12 ×Ö½ÚµÄαÊײ¿ÊÇΪÁ˼ÆËã¼ìÑéºÍ¶øÁÙʱÌí¼ÓµÄ¡£ +首部字段å�ªæœ‰ 8 个字节,包括æº�端å�£ã€�目的端å�£ã€�长度ã€�检验和。12 字节的伪首部是为了计算检验和而临时添加的。 -## TCP Êײ¿¸ñʽ +## TCP 首部格å¼� ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/21a00b02-c0a6-4bcd-9af0-5ec6bb66e34c.jpg) -- **ÐòºÅ** £ºÓÃÓÚ¶Ô×Ö½ÚÁ÷½øÐбàºÅ£¬ÀýÈçÐòºÅΪ 301£¬±íʾµÚÒ»¸ö×ֽڵıàºÅΪ 301£¬Èç¹ûЯ´øµÄÊý¾Ý³¤¶ÈΪ 100 ×Ö½Ú£¬ÄÇôÏÂÒ»¸ö±¨ÎĶεÄÐòºÅӦΪ 401¡£ +- **åº�å�·** :用于对字节æµ�进行编å�·ï¼Œä¾‹å¦‚åº�å�·ä¸º 301,表示第一个字节的编å�·ä¸º 301,如果æ�ºå¸¦çš„æ•°æ�®é•¿åº¦ä¸º 100 字节,那么下一个报文段的åº�å�·åº”为 401。 -- **È·ÈϺÅ** £ºÆÚÍûÊÕµ½µÄÏÂÒ»¸ö±¨ÎĶεÄÐòºÅ¡£ÀýÈç B ÕýÈ·ÊÕµ½ A ·¢ËÍÀ´µÄÒ»¸ö±¨ÎĶΣ¬ÐòºÅΪ 501£¬Ð¯´øµÄÊý¾Ý³¤¶ÈΪ 200 ×Ö½Ú£¬Òò´Ë B ÆÚÍûÏÂÒ»¸ö±¨ÎĶεÄÐòºÅΪ 701£¬B ·¢Ë͸ø A µÄÈ·Èϱ¨ÎĶÎÖÐÈ·ÈϺžÍΪ 701¡£ +- **确认å�·** :期望收到的下一个报文段的åº�å�·ã€‚例如 B 正确收到 A å�‘é€�æ�¥çš„一个报文段,åº�å�·ä¸º 501,æ�ºå¸¦çš„æ•°æ�®é•¿åº¦ä¸º 200 字节,因此 B 期望下一个报文段的åº�å�·ä¸º 701,B å�‘é€�ç»™ A 的确认报文段中确认å�·å°±ä¸º 701。 -- **Êý¾ÝÆ«ÒÆ** £ºÖ¸µÄÊÇÊý¾Ý²¿·Ö¾àÀ뱨ÎÄ¶ÎÆðʼ´¦µÄÆ«ÒÆÁ¿£¬Êµ¼ÊÉÏÖ¸µÄÊÇÊײ¿µÄ³¤¶È¡£ +- **æ•°æ�®å��ç§»** :指的是数æ�®éƒ¨åˆ†è·�离报文段起始处的å��ç§»é‡�,实际上指的是首部的长度。 -- **È·ÈÏ ACK** £ºµ± ACK=1 ʱȷÈϺÅ×Ö¶ÎÓÐЧ£¬·ñÔòÎÞЧ¡£TCP ¹æ¶¨£¬ÔÚÁ¬½Ó½¨Á¢ºóËùÓд«Ë͵ı¨ÎĶζ¼±ØÐë°Ñ ACK Öà 1¡£ +- **确认 ACK** :当 ACK=1 时确认å�·å­—段有效,å�¦åˆ™æ— æ•ˆã€‚TCP 规定,在连接建立å�Žæ‰€æœ‰ä¼ é€�的报文段都必须把 ACK ç½® 1。 -- **ͬ²½ SYN** £ºÔÚÁ¬½Ó½¨Á¢Ê±ÓÃÀ´Í¬²½ÐòºÅ¡£µ± SYN=1£¬ACK=0 ʱ±íʾÕâÊÇÒ»¸öÁ¬½ÓÇëÇó±¨ÎĶΡ£Èô¶Ô·½Í¬Ò⽨Á¢Á¬½Ó£¬ÔòÏìÓ¦±¨ÎÄÖÐ SYN=1£¬ACK=1¡£ +- **å�Œæ­¥ SYN** :在连接建立时用æ�¥å�Œæ­¥åº�å�·ã€‚当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方å�Œæ„�建立连接,则å“�应报文中 SYN=1,ACK=1。 -- **ÖÕÖ¹ FIN** £ºÓÃÀ´ÊÍ·ÅÒ»¸öÁ¬½Ó£¬µ± FIN=1 ʱ£¬±íʾ´Ë±¨ÎĶεķ¢ËÍ·½µÄÊý¾ÝÒÑ·¢ËÍÍê±Ï£¬²¢ÒªÇóÊÍ·ÅÔËÊäÁ¬½Ó¡£ +- **终止 FIN** :用æ�¥é‡Šæ”¾ä¸€ä¸ªè¿žæŽ¥ï¼Œå½“ FIN=1 时,表示此报文段的å�‘é€�方的数æ�®å·²å�‘é€�完毕,并è¦�求释放è¿�输连接。 -- **´°¿Ú** £º´°¿ÚÖµ×÷Ϊ½ÓÊÕ·½È÷¢ËÍ·½ÉèÖÃÆä·¢ËÍ´°¿ÚµÄÒÀ¾Ý¡£Ö®ËùÒÔÒªÓÐÕâ¸öÏÞÖÆ£¬ÊÇÒòΪ½ÓÊÕ·½µÄÊý¾Ý»º´æ¿Õ¼äÊÇÓÐÏ޵ġ£ +- **窗å�£** :窗å�£å€¼ä½œä¸ºæŽ¥æ”¶æ–¹è®©å�‘é€�方设置其å�‘é€�窗å�£çš„ä¾�æ�®ã€‚之所以è¦�有这个é™�制,是因为接收方的数æ�®ç¼“存空间是有é™�的。 -## TCP µÄÈý´ÎÎÕÊÖ + +MSS 为TCP报文中数æ�®çš„æœ€å¤§é•¿åº¦å¸¸ä¸º1460byte + +MTU 为1500字节是最大传输å�•å…ƒ +## TCP 的三次æ�¡æ‰‹ ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/086871db-5871-460f-97b7-126cd738bb0e.jpg) -¼ÙÉè A Ϊ¿Í»§¶Ë£¬B Ϊ·þÎñÆ÷¶Ë¡£ +å�‡è®¾ A 为客户端,B 为æœ�务器端。 -1. Ê×ÏÈ B ´¦ÓÚ LISTEN£¨¼àÌý£©×´Ì¬£¬µÈ´ý¿Í»§µÄÁ¬½ÓÇëÇó¡£ -2. A Ïò B ·¢ËÍÁ¬½ÓÇëÇó±¨ÎĶΣ¬SYN=1£¬ACK=0£¬Ñ¡ÔñÒ»¸ö³õʼµÄÐòºÅ x¡£ -3. B ÊÕµ½Á¬½ÓÇëÇó±¨ÎĶΣ¬Èç¹ûͬÒ⽨Á¢Á¬½Ó£¬ÔòÏò A ·¢ËÍÁ¬½ÓÈ·Èϱ¨ÎĶΣ¬SYN=1£¬ACK=1£¬È·ÈϺÅΪ x+1£¬Í¬Ê±Ò²Ñ¡ÔñÒ»¸ö³õʼµÄÐòºÅ y¡£ -4. A ÊÕµ½ B µÄÁ¬½ÓÈ·Èϱ¨ÎĶκ󣬻¹ÒªÏò B ·¢³öÈ·ÈÏ£¬È·ÈϺÅΪ y+1£¬ÐòºÅΪ x+1¡£ -5. B ÊÕµ½ A µÄÈ·ÈϺó£¬Á¬½Ó½¨Á¢¡£ +1. 首先 B 处于 LISTEN(监å�¬ï¼‰çжæ€�,等待客户的连接请求。 +2. A å�‘ B å�‘é€�连接请求报文段,SYN=1,ACK=0,选择一个åˆ�å§‹çš„åº�å�· x。 +3. B 收到连接请求报文段,如果å�Œæ„�建立连接,则å�‘ A å�‘é€�连接确认报文段,SYN=1,ACK=1,确认å�·ä¸º x+1,å�Œæ—¶ä¹Ÿé€‰æ‹©ä¸€ä¸ªåˆ�å§‹çš„åº�å�· y。 +4. A 收到 B 的连接确认报文段å�Žï¼Œè¿˜è¦�å�‘ B å�‘出确认,确认å�·ä¸º y+1,åº�å�·ä¸º x+1。 +5. B 收到 A 的确认å�Žï¼Œè¿žæŽ¥å»ºç«‹ã€‚ -## TCP µÄËĴλÓÊÖ +## TCP 的四次挥手 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/78f65456-666b-4044-b4ee-f7692dbbc0d3.jpg) -ÒÔÏÂÃèÊö²»ÌÖÂÛÐòºÅºÍÈ·ÈϺţ¬ÒòΪÐòºÅºÍÈ·ÈϺŵĹæÔò±È½Ï¼òµ¥¡£²¢ÇÒ²»ÌÖÂÛ ACK£¬ÒòΪ ACK ÔÚÁ¬½Ó½¨Á¢Ö®ºó¶¼Îª 1¡£ +以下æ��è¿°ä¸�讨论åº�å�·å’Œç¡®è®¤å�·ï¼Œå› ä¸ºåº�å�·å’Œç¡®è®¤å�·çš„规则比较简å�•。并且ä¸�讨论 ACK,因为 ACK 在连接建立之å�Žéƒ½ä¸º 1。 -1. A ·¢ËÍÁ¬½ÓÊͷű¨ÎĶΣ¬FIN=1£» -2. B ÊÕµ½Ö®ºó·¢³öÈ·ÈÏ£¬´Ëʱ TCP ÊôÓÚ°ë¹Ø±Õ״̬£¬B ÄÜÏò A ·¢ËÍÊý¾Ýµ«ÊÇ A ²»ÄÜÏò B ·¢ËÍÊý¾Ý£» -3. µ± B Òª²»ÔÙÐèÒªÁ¬½Óʱ£¬·¢ËÍÁ¬½ÓÊÍ·ÅÇëÇó±¨ÎĶΣ¬FIN=1£» -4. A ÊÕµ½ºó·¢³öÈ·ÈÏ£¬´ËʱÁ¬½ÓÊÍ·Å¡£ +1. A å�‘é€�连接释放报文段,FIN=1ï¼› +2. B 收到之å�Žå�‘出确认,此时 TCP 属于å�Šå…³é—­çжæ€�,B 能å�‘ A å�‘é€�æ•°æ�®ä½†æ˜¯ A ä¸�能å�‘ B å�‘é€�æ•°æ�®ï¼› +3. 当 B è¦�ä¸�å†�需è¦�连接时,å�‘é€�连接释放请求报文段,FIN=1ï¼› +4. A 收到å�Žå�‘出确认,此时连接释放。 **TIME_WAIT** -¿Í»§¶Ë½ÓÊÕµ½·þÎñÆ÷¶ËµÄ FIN ±¨Îĺó½øÈë´Ë״̬£¬´Ëʱ²¢²»ÊÇÖ±½Ó½øÈë CLOSED ״̬£¬»¹ÐèÒªµÈ´ýÒ»¸öʱ¼ä¼ÆÊ±Æ÷ÉèÖõÄʱ¼ä¡£Õâô×öÓÐÁ½¸öÀíÓÉ£º +客户端接收到æœ�务器端的 FIN 报文å�Žè¿›å…¥æ­¤çжæ€�,此时并ä¸�是直接进入 CLOSED 状æ€�,还需è¦�等待一个时间计时器设置的时间。这么å�šæœ‰ä¸¤ä¸ªç�†ç”±ï¼š -1. È·±£×îºóÒ»¸öÈ·Èϱ¨ÎĶÎÄܹ»µ½´ï¡£Èç¹û B ûÊÕµ½ A ·¢ËÍÀ´µÄÈ·Èϱ¨ÎĶΣ¬ÄÇô¾Í»áÖØÐ·¢ËÍÁ¬½ÓÊÍ·ÅÇëÇó±¨ÎĶΣ¬A µÈ´ýÒ»¶Îʱ¼ä¾ÍÊÇΪÁË´¦ÀíÕâÖÖÇé¿öµÄ·¢Éú¡£ -2. ¿ÉÄÜ´æÔÚ¡°ÒÑʧЧµÄÁ¬½ÓÇëÇó±¨ÎĶΡ±£¬ÎªÁË·ÀÖ¹ÕâÖÖ±¨ÎĶγöÏÖÔÚ±¾´ÎÁ¬½ÓÖ®Í⣬ÐèÒªµÈ´ýÒ»¶Îʱ¼ä¡£ +1. ç¡®ä¿�最å�Žä¸€ä¸ªç¡®è®¤æŠ¥æ–‡æ®µèƒ½å¤Ÿåˆ°è¾¾ã€‚如果 B 没收到 A å�‘é€�æ�¥çš„确认报文段,那么就会é‡�æ–°å�‘é€�连接释放请求报文段,A 等待一段时间就是为了处ç�†è¿™ç§�情况的å�‘生。 +2. å�¯èƒ½å­˜åœ¨â€œå·²å¤±æ•ˆçš„连接请求报文段â€�,为了防止这ç§�报文段出现在本次连接之外,需è¦�等待一段时间。 -## TCP »¬¶¯´°¿Ú +## TCP 滑动窗å�£ ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/223fc26e-2fd6-484c-bcb7-443cac134f15.jpg) -´°¿ÚÊÇ»º´æµÄÒ»²¿·Ö£¬ÓÃÀ´ÔÝʱ´æ·Å×Ö½ÚÁ÷¡£·¢ËÍ·½ºÍ½ÓÊÕ·½¸÷ÓÐÒ»¸ö´°¿Ú£¬½ÓÊÕ·½Í¨¹ý TCP ±¨ÎĶÎÖеĴ°¿Ú×ֶθæËß·¢ËÍ·½×Ô¼ºµÄ´°¿Ú´óС£¬·¢ËÍ·½¸ù¾ÝÕâ¸öÖµºÍÆäËüÐÅÏ¢ÉèÖÃ×Ô¼ºµÄ´°¿Ú´óС¡£ +窗å�£æ˜¯ç¼“存的一部分,用æ�¥æš‚时存放字节æµ�。å�‘é€�方和接收方å�„有一个窗å�£ï¼ŒæŽ¥æ”¶æ–¹é€šè¿‡ TCP 报文段中的窗å�£å­—段告诉å�‘é€�方自己的窗å�£å¤§å°�,å�‘é€�方根æ�®è¿™ä¸ªå€¼å’Œå…¶å®ƒä¿¡æ�¯è®¾ç½®è‡ªå·±çš„窗å�£å¤§å°�。 -·¢ËÍ´°¿ÚÄÚµÄ×Ö½Ú¶¼ÔÊÐí±»·¢ËÍ£¬½ÓÊÕ´°¿ÚÄÚµÄ×Ö½Ú¶¼ÔÊÐí±»½ÓÊÕ¡£Èç¹û·¢ËÍ´°¿Ú×󲿵Ä×Ö½ÚÒѾ­·¢ËͲ¢ÇÒÊÕµ½ÁËÈ·ÈÏ£¬ÄÇô¾Í½«·¢ËÍ´°¿ÚÏòÓÒ»¬¶¯Ò»¶¨¾àÀ룬ֱµ½×󲿵ÚÒ»¸ö×Ö½Ú²»ÊÇÒÑ·¢ËͲ¢ÇÒÒÑÈ·ÈϵÄ״̬£»½ÓÊÕ´°¿ÚµÄ»¬¶¯ÀàËÆ£¬½ÓÊÕ´°¿Ú×ó²¿×Ö½ÚÒѾ­·¢ËÍÈ·Èϲ¢½»¸¶Ö÷»ú£¬¾ÍÏòÓÒ»¬¶¯½ÓÊÕ´°¿Ú¡£ +å�‘é€�窗å�£å†…的字节都å…�许被å�‘é€�,接收窗å�£å†…的字节都å…�许被接收。如果å�‘é€�窗å�£å·¦éƒ¨çš„字节已ç»�å�‘é€�并且收到了确认,那么就将å�‘é€�窗å�£å�‘å�³æ»‘动一定è·�离,直到左部第一个字节ä¸�是已å�‘é€�并且已确认的状æ€�;接收窗å�£çš„æ»‘动类似,接收窗å�£å·¦éƒ¨å­—节已ç»�å�‘é€�确认并交付主机,就å�‘å�³æ»‘动接收窗å�£ã€‚ -½ÓÊÕ´°¿ÚÖ»»á¶Ô´°¿ÚÄÚ×îºóÒ»¸ö°´Ðòµ½´ïµÄ×Ö½Ú½øÐÐÈ·ÈÏ£¬ÀýÈç½ÓÊÕ´°¿ÚÒѾ­ÊÕµ½µÄ×Ö½ÚΪ {31, 32, 34, 35}£¬ÆäÖÐ {31, 32} °´Ðòµ½´ï£¬¶ø {34, 35} ¾Í²»ÊÇ£¬Òò´ËÖ»¶Ô×Ö½Ú 32 ½øÐÐÈ·ÈÏ¡£·¢ËÍ·½µÃµ½Ò»¸ö×Ö½ÚµÄÈ·ÈÏÖ®ºó£¬¾ÍÖªµÀÕâ¸ö×Ö½Ú֮ǰµÄËùÓÐ×Ö½Ú¶¼ÒѾ­±»½ÓÊÕ¡£ +接收窗å�£å�ªä¼šå¯¹çª—å�£å†…最å�Žä¸€ä¸ªæŒ‰åº�到达的字节进行确认,例如接收窗å�£å·²ç»�收到的字节为 {31, 32, 34, 35},其中 {31, 32} 按åº�到达,而 {34, 35} å°±ä¸�是,因此å�ªå¯¹å­—节 32 进行确认。**å�‘é€�方得到一个字节的确认之å�Žï¼Œå°±çŸ¥é�“这个字节之å‰�的所有字节都已ç»�被接收。累积ACK** -## TCP ¿É¿¿´«Êä +在探讨å�¯é� æ•°æ�®ä¼ è¾“的过程中,为了解决æµ�水线传输下的丢包问题,æ��出了GBNå��议和SRå��è®® +### GBN +一旦å�‘生错误,丢弃已近接收到好的包,回到第N步之å‰� -TCP ʹÓó¬Ê±ÖØ´«À´ÊµÏÖ¿É¿¿´«Ê䣺Èç¹ûÒ»¸öÒѾ­·¢Ë͵ı¨ÎĶÎÔÚ³¬Ê±Ê±¼äÄÚûÓÐÊÕµ½È·ÈÏ£¬ÄÇô¾ÍÖØ´«Õâ¸ö±¨ÎĶΡ£ +GBN 采用累积ACK -Ò»¸ö±¨ÎĶδӷ¢ËÍÔÙµ½½ÓÊÕµ½È·ÈÏËù¾­¹ýµÄʱ¼ä³ÆÎªÍù·µÊ±¼ä RTT£¬¼ÓȨƽ¾ùÍù·µÊ±¼ä RTTs ¼ÆËãÈçÏ£º +窗å�£é•¿åº¦å¿…é¡»å°�于åº�å�·ç©ºé—´å¤§å°� + +优点:接收缓存简å�• +### SR +选择é‡�ä¼  + +窗å�£é•¿åº¦å¿…é¡»å°�于等于åº�å�·ç©ºé—´å¤§å°�的一å�Š + +**TCP采用的ä¸�是GBN也ä¸�是SR,而是一ç§�更优的方案** +## TCP å�¯é� ä¼ è¾“ + +TCP 使用超时é‡�ä¼ æ�¥å®žçްå�¯é� ä¼ è¾“:如果一个已ç»�å�‘é€�的报文段在超时时间内没有收到确认,那么就é‡�传这个报文段。 + +一个报文段从å�‘é€�å†�到接收到确认所ç»�过的时间称为往返时间 RTT,加æ�ƒå¹³å�‡å¾€è¿”æ—¶é—´ RTTs 计算如下: ![](http://latex.codecogs.com/gif.latex?\\\\RTTs=(1-a)*(RTTs)+a*RTT) -³¬Ê±Ê±¼ä RTO Ó¦¸ÃÂÔ´óÓÚ RRTs£¬TCP ʹÓõij¬Ê±Ê±¼ä¼ÆËãÈçÏ£º +è¶…æ—¶æ—¶é—´ RTO 应该略大于 RRTs,TCP 使用的超时时间计算如下: ![](http://latex.codecogs.com/gif.latex?\\\\RTO=RTTs+4*RTT_d) -ÆäÖÐ RTTd Ϊƫ²î£¬ËüÓëÐ嵀 RRT ºÍ RRTs Óйء£ +其中 RTTd 为å��差,它与新的 RRT å’Œ RRTs 有关。 -## TCP Á÷Á¿¿ØÖÆ +## TCP æµ�é‡�控制 -Á÷Á¿¿ØÖÆÊÇΪÁË¿ØÖÆ·¢ËÍ·½·¢ËÍËÙÂÊ£¬±£Ö¤½ÓÊÕ·½À´µÃ¼°½ÓÊÕ¡£ +æµ�é‡�控制是为了控制å�‘é€�æ–¹å�‘é€�速率,ä¿�è¯�接收方æ�¥å¾—å�ŠæŽ¥æ”¶ã€‚ -½ÓÊÕ·½·¢Ë͵ÄÈ·Èϱ¨ÎÄÖеĴ°¿Ú×ֶοÉÒÔÓÃÀ´¿ØÖÆ·¢ËÍ·½´°¿Ú´óС£¬´Ó¶øÓ°Ïì·¢ËÍ·½µÄ·¢ËÍËÙÂÊ¡£ÀýÈ罫´°¿Ú×Ö¶ÎÉèÖÃΪ 0£¬Ôò·¢ËÍ·½²»ÄÜ·¢ËÍÊý¾Ý¡£ +接收方å�‘é€�的确认报文中的窗å�£å­—段å�¯ä»¥ç”¨æ�¥æŽ§åˆ¶å�‘é€�方窗å�£å¤§å°�,从而影å“�å�‘é€�方的å�‘é€�速率。例如将窗å�£å­—段设置为 0,则å�‘é€�æ–¹ä¸�能å�‘é€�æ•°æ�®ã€‚ -## TCP ÓµÈû¿ØÖÆ +## TCP 拥塞控制 -Èç¹ûÍøÂç³öÏÖÓµÈû£¬·Ö×齫»á¶ªÊ§£¬´Ëʱ·¢ËÍ·½»á¼ÌÐøÖØ´«£¬´Ó¶øµ¼ÖÂÍøÂçÓµÈû³Ì¶È¸ü¸ß¡£Òò´Ëµ±³öÏÖÓµÈûʱ£¬Ó¦µ±¿ØÖÆ·¢ËÍ·½µÄËÙÂÊ¡£ÕâÒ»µãºÍÁ÷Á¿¿ØÖƺÜÏñ£¬µ«Êdzö·¢µã²»Í¬¡£Á÷Á¿¿ØÖÆÊÇΪÁËÈýÓÊÕ·½ÄÜÀ´µÃ¼°½ÓÊÜ£¬¶øÓµÈû¿ØÖÆÊÇΪÁ˽µµÍÕû¸öÍøÂçµÄÓµÈû³Ì¶È¡£ +如果网络出现拥塞,分组将会丢失,此时å�‘é€�方会继续é‡�传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制å�‘é€�方的速率。这一点和æµ�é‡�控制很åƒ�,但是出å�‘点ä¸�å�Œã€‚æµ�é‡�控制是为了让接收方能æ�¥å¾—å�пޥå�—,而拥塞控制是为了é™�低整个网络的拥塞程度。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/a69af9bb-b5ad-4896-862d-697e5ee4feb1.png) -TCP Ö÷Ҫͨ¹ýËÄÖÖËã·¨À´½øÐÐÓµÈû¿ØÖÆ£ºÂý¿ªÊ¼¡¢ÓµÈû±ÜÃâ¡¢¿ìÖØ´«¡¢¿ì»Ö¸´¡£·¢ËÍ·½ÐèҪά»¤ÓÐÒ»¸ö½Ð×öÓµÈû´°¿Ú£¨cwnd£©µÄ״̬±äÁ¿¡£×¢ÒâÓµÈû´°¿ÚÓë·¢ËÍ·½´°¿ÚµÄÇø±ð£¬ÓµÈû´°¿ÚÖ»ÊÇÒ»¸ö״̬±äÁ¿£¬Êµ¼Ê¾ö¶¨·¢ËÍ·½ÄÜ·¢ËͶàÉÙÊý¾ÝµÄÊÇ·¢ËÍ·½´°¿Ú¡£ +TCP 主è¦�通过四ç§�算法æ�¥è¿›è¡Œæ‹¥å¡žæŽ§åˆ¶ï¼šæ…¢å¼€å§‹ã€�拥塞é�¿å…�ã€�å¿«é‡�ä¼ ã€�å¿«æ�¢å¤�。å�‘é€�方需è¦�维护有一个å�«å�šæ‹¥å¡žçª—å�£ï¼ˆcwnd)的状æ€�å�˜é‡�。注æ„�拥塞窗å�£ä¸Žå�‘é€�方窗å�£çš„区别,拥塞窗å�£å�ªæ˜¯ä¸€ä¸ªçжæ€�å�˜é‡�,实际决定å�‘é€�方能å�‘é€�多少数æ�®çš„æ˜¯å�‘é€�方窗å�£ã€‚ -ΪÁ˱ãÓÚÌÖÂÛ£¬×öÈçϼÙÉ裺 +为了便于讨论,å�šå¦‚下å�‡è®¾ï¼š -1. ½ÓÊÕ·½ÓÐ×ã¹»´óµÄ½ÓÊÕ»º´æ£¬Òò´Ë²»»á·¢ÉúÁ÷Á¿¿ØÖÆ£» -2. ËäÈ» TCP µÄ´°¿Ú»ùÓÚ×Ö½Ú£¬µ«ÊÇÕâÀïÉè´°¿ÚµÄ´óСµ¥Î»Îª±¨ÎĶΡ£ +1. 接收方有足够大的接收缓存,因此ä¸�会å�‘生æµ�é‡�控制; +2. 虽然 TCP 的窗å�£åŸºäºŽå­—节,但是这里设窗å�£çš„大å°�å�•ä½�为报文段。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/346244ff-98c1-4f12-9a87-d0832e8c04cf.jpg) -### Âý¿ªÊ¼ÓëÓµÈû±ÜÃâ +### 慢开始与拥塞é�¿å…� -·¢Ë͵Ä×î³õÖ´ÐÐÂý¿ªÊ¼£¬Áî cwnd=1£¬·¢ËÍ·½Ö»ÄÜ·¢ËÍ 1 ¸ö±¨ÎĶΣ»µ±ÊÕµ½È·ÈϺ󣬽« cwnd ¼Ó±¶£¬Òò´ËÖ®ºó·¢ËÍ·½Äܹ»·¢Ë͵ı¨ÎĶÎΪ£º2¡¢4¡¢8 ... +å�‘é€�的最åˆ�执行慢开始,令 cwnd=1,å�‘é€�æ–¹å�ªèƒ½å�‘é€� 1 个报文段;当收到确认å�Žï¼Œå°† cwnd 加å€�,因此之å�Žå�‘é€�方能够å�‘é€�的报文段为:2ã€�4ã€�8 ... -×¢Òâµ½Âý¿ªÊ¼Ã¿¸öÂִζ¼½« cwnd ¼Ó±¶£¬ÕâÑù»áÈà cwnd Ôö³¤Ëٶȷdz£¿ì£¬´Ó¶øÊ¹µÃ·¢ËÍ·½·¢Ë͵ÄËÙ¶ÈÔö³¤Ëٶȹý¿ì£¬ÍøÂçÓµÈûµÄ¿ÉÄÜÒ²¾Í¸ü¸ß¡£ÉèÖÃÒ»¸öÂý¿ªÊ¼ÃÅÏÞ ssthresh£¬µ± cwnd >= ssthresh ʱ£¬½øÈëÓµÈû±ÜÃ⣬ÿ¸öÂÖ´ÎÖ»½« cwnd ¼Ó 1¡£ +注æ„�到慢开始æ¯�个轮次都将 cwnd 加å€�,这样会让 cwnd 增长速度é�žå¸¸å¿«ï¼Œä»Žè€Œä½¿å¾—å�‘é€�æ–¹å�‘é€�的速度增长速度过快,网络拥塞的å�¯èƒ½ä¹Ÿå°±æ›´é«˜ã€‚设置一个慢开始门é™� ssthresh,当 cwnd >= ssthresh 时,进入拥塞é�¿å…�,æ¯�个轮次å�ªå°† cwnd 加 1。 -Èç¹û³öÏÖÁ˳¬Ê±£¬ÔòÁî ssthresh = cwnd / 2£¬È»ºóÖØÐÂÖ´ÐÐÂý¿ªÊ¼¡£ +如果出现了超时,则令 ssthresh = cwnd / 2,然å�Žé‡�新执行慢开始。 -### ¿ìÖØ´«Óë¿ì»Ö¸´ +### å¿«é‡�传与快æ�¢å¤� -ÔÚ½ÓÊÕ·½£¬ÒªÇóÿ´Î½ÓÊÕµ½±¨ÎĶζ¼Ó¦¸Ã·¢ËͶÔÒÑÊÕµ½ÓÐÐò±¨ÎĶεÄÈ·ÈÏ£¬ÀýÈçÒѾ­½ÓÊÕµ½ M1 ºÍ M2£¬´ËʱÊÕµ½ M4£¬Ó¦µ±·¢ËÍ¶Ô M2 µÄÈ·ÈÏ¡£ +在接收方,è¦�求æ¯�次接收到报文段都应该å�‘é€�对已收到有åº�报文段的确认,例如已ç»�接收到 M1 å’Œ M2,此时收到 M4,应当å�‘é€�对 M2 的确认。 -ÔÚ·¢ËÍ·½£¬Èç¹ûÊÕµ½Èý¸öÖØ¸´È·ÈÏ£¬ÄÇô¿ÉÒÔÈ·ÈÏÏÂÒ»¸ö±¨ÎĶζªÊ§£¬ÀýÈçÊÕµ½Èý¸ö M2 £¬Ôò M3 ¶ªÊ§¡£´ËʱִÐпìÖØ´«£¬Á¢¼´ÖØ´«ÏÂÒ»¸ö±¨ÎĶΡ£ +在å�‘é€�方,如果收到三个é‡�å¤�确认,那么å�¯ä»¥ç¡®è®¤ä¸‹ä¸€ä¸ªæŠ¥æ–‡æ®µä¸¢å¤±ï¼Œä¾‹å¦‚收到三个 M2 ,则 M3 丢失。此时执行快é‡�传,立å�³é‡�传下一个报文段。 -ÔÚÕâÖÖÇé¿öÏ£¬Ö»ÊǶªÊ§¸ö±ð±¨ÎĶΣ¬¶ø²»ÊÇÍøÂçÓµÈû£¬Òò´ËÖ´Ðпì»Ö¸´£¬Áî ssthresh = cwnd / 2 £¬cwnd = ssthresh£¬×¢Òâµ½´Ëʱֱ½Ó½øÈëÓµÈû±ÜÃâ¡£ +在这ç§�情况下,å�ªæ˜¯ä¸¢å¤±ä¸ªåˆ«æŠ¥æ–‡æ®µï¼Œè€Œä¸�是网络拥塞,因此执行快æ�¢å¤�,令 ssthresh = cwnd / 2 ,cwnd = ssthresh,注æ„�到此时直接进入拥塞é�¿å…�。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/b18d679b-c8e2-4564-88ee-7600090e46da.jpg) -# µÚÁùÕ ӦÓòã* +![](https://github.com/xbhoneybee/InterviewNotes/blob/master/pics/TIM%E6%88%AA%E5%9B%BE20180227172950.png?raw=true) +# 第六章 应用层* -## ÓòÃûϵͳ DNS +一个程åº�å�¯ä»¥å�Šæ”¯æŒ�TCPå�ˆæ”¯æŒ�UDPå��议,但是程åº�之间的连接必须使用相å�Œçš„å��议。 +## 域å��系统 DNS -°ÑÖ÷»úÃû½âÎöΪ IP µØÖ·¡£ +把主机å��è§£æž�为 IP 地å�€ã€‚ -±»Éè¼Æ³É·Ö²¼Ê½ÏµÍ³¡£ +被设计æˆ�分布å¼�系统。 -### 1. ²ã´Î½á¹¹ +### 1. 层次结构 -Ò»¸öÓòÃûÓɶà¸ö²ã´Î¹¹³É£¬´ÓÉϲ㵽ϲã·Ö±ðΪ¶¥¼¶ÓòÃû¡¢¶þ¼¶ÓòÃû¡¢Èý¼¶ÓòÃûÒÔ¼°Ëļ¶ÓòÃû¡£ËùÓÐÓòÃû¿ÉÒÔ»­³ÉÒ»¿ÅÓòÃûÊ÷¡£ +一个域å��由多个层次构æˆ�,从上层到下层分别为顶级域å��ã€�二级域å��ã€�三级域å��以å�Šå››çº§åŸŸå��。所有域å��å�¯ä»¥ç”»æˆ�一颗域å��树。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/c2117f61-1177-4768-bf33-cf4f950d911c.png) ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/a4b162e5-db2a-4a27-b213-1fe481c5a06a.png) -ÓòÃû·þÎñÆ÷¿ÉÒÔ·ÖΪÒÔÏÂËÄÀࣺ +域å��æœ�务器å�¯ä»¥åˆ†ä¸ºä»¥ä¸‹å››ç±»ï¼š -1. ¸ùÓòÃû·þÎñÆ÷£º½âÎö¶¥¼¶ÓòÃû£» -2. ¶¥¼¶ÓòÃû·þÎñÆ÷£º½âÎö¶þ¼¶ÓòÃû£» -3. ȨÏÞÓòÃû·þÎñÆ÷£º½âÎöÇøÄÚµÄÓòÃû£» -4. ±¾µØÓòÃû·þÎñÆ÷£ºÒ²³ÆÎªÄ¬ÈÏÓòÃû·þÎñÆ÷¡£¿ÉÒÔÔÚÆäÖÐÅäÖøßËÙ»º´æ¡£ +1. 根域å��æœ�务器:解æž�顶级域å��ï¼› +2. 顶级域å��æœ�务器:解æž�二级域å��ï¼› +3. æ�ƒé™�域å��æœ�务器:解æž�区内的域å��ï¼› +4. 本地域å��æœ�务器:也称为默认域å��æœ�务器。å�¯ä»¥åœ¨å…¶ä¸­é…�置高速缓存。 -ÇøºÍÓòµÄ¸ÅÄͬ£¬¿ÉÒÔÔÚÒ»¸öÓòÖл®·Ö¶à¸öÇø¡£Í¼ b ÔÚÓò abc.com Öл®·ÖÁËÁ½¸öÇø£ºabc.com ºÍ y.abc.com +区和域的概念ä¸�å�Œï¼Œå�¯ä»¥åœ¨ä¸€ä¸ªåŸŸä¸­åˆ’分多个区。图 b 在域 abc.com 中划分了两个区:abc.com å’Œ y.abc.com ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/fc0c6b2d-68c7-4de8-aaaa-97355a4f0472.jpg) -Òò´Ë¾ÍÐèÒªÁ½¸öȨÏÞÓòÃû·þÎñÆ÷£º +因此就需è¦�两个æ�ƒé™�域å��æœ�务器: ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/8b335d94-c1ca-42e1-ad48-bb179d28a4f1.jpg) -### 2. ½âÎö¹ý³Ì +### 2. è§£æž�过程 -Ö÷»úÏò±¾µØÓòÃû·þÎñÆ÷½âÎöµÄ¹ý³Ì²ÉÓõݹ飬¶ø±¾µØÓòÃû·þÎñÆ÷ÏòÆäËüÓòÃû·þÎñÆ÷½âÎö¿ÉÒÔʹÓõݹéºÍµü´úÁ½ÖÖ·½Ê½¡£ +主机å�‘本地域å��æœ�务器解æž�的过程采用递归,而本地域å��æœ�务器å�‘其它域å��æœ�务器解æž�å�¯ä»¥ä½¿ç”¨é€’归和迭代两ç§�æ–¹å¼�。 -µü´úµÄ·½Ê½Ï£¬±¾µØÓòÃû·þÎñÆ÷ÏòÒ»¸öÓòÃû·þÎñÆ÷½âÎöÇëÇó½âÎöÖ®ºó£¬½á¹û·µ»Øµ½±¾µØÓòÃû·þÎñÆ÷£¬È»ºó±¾µØÓòÃû·þÎñÆ÷¼ÌÐøÏòÆäËüÓòÃû·þÎñÆ÷ÇëÇó½âÎö£»¶øµÝ¹éµØ·½Ê½Ï£¬½á¹û²»ÊÇÖ±½Ó·µ»ØµÄ£¬¶øÊǼÌÐøÏòǰÇëÇó½âÎö£¬×îºóµÄ½á¹û²Å»á·µ»Ø¡£ +迭代的方å¼�下,本地域å��æœ�务器å�‘一个域å��æœ�务器解æž�请求解æž�之å�Žï¼Œç»“果返回到本地域å��æœ�务器,然å�Žæœ¬åœ°åŸŸå��æœ�务器继续å�‘其它域å��æœ�务器请求解æž�;而递归地方å¼�下,结果ä¸�是直接返回的,而是继续å�‘å‰�请求解æž�,最å�Žçš„结果æ‰�会返回。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/6bc61bb8-3b1c-4dc8-ac25-cef925ace0eb.jpg) -## Îļþ´«ÊäЭÒé FTP +## 文件传输å��è®® FTP -FTP ÔÚÔËÊä²ãʹÓà TCP£¬²¢ÇÒÐèÒª½¨Á¢Á½¸ö²¢ÐÐµÄ TCP Á¬½Ó£º¿ØÖÆÁ¬½ÓºÍÊý¾ÝÁ¬½Ó¡£¿ØÖÆÁ¬½ÓÔÚÕû¸ö»á»°ÆÚ¼äÒ»Ö±±£³Ö´ò¿ª£¬¶øÊý¾ÝÁ¬½ÓÔÚÊý¾Ý´«ËÍÍê±ÏÖ®ºó¾Í¹Ø±Õ¡£¿ØÖÆÁ¬½ÓʹÓö˿ںŠ21£¬Êý¾ÝÁ¬½ÓʹÓö˿ںŠ20¡£ +FTP 在è¿�输层使用 TCP,并且需è¦�建立两个并行的 TCP 连接:控制连接和数æ�®è¿žæŽ¥ã€‚控制连接在整个会è¯�期间一直ä¿�æŒ�打开,而数æ�®è¿žæŽ¥åœ¨æ•°æ�®ä¼ é€�完毕之å�Žå°±å…³é—­ã€‚控制连接使用端å�£å�· 21,数æ�®è¿žæŽ¥ä½¿ç”¨ç«¯å�£å�· 20。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/58633775-8584-4a01-ad3f-eee4d9a466e1.jpg) -## Ô¶³ÌÖÕ¶ËЭÒé TELNET +## 远程终端å��è®® TELNET -TELNET ÓÃÓڵǼµ½Ô¶³ÌÖ÷»úÉÏ£¬²¢ÇÒÔ¶³ÌÖ÷»úÉϵÄÊä³öÒ²»á·µ»Ø¡£ +TELNET 用于登录到远程主机上,并且远程主机上的输出也会返回。 -TELNET ¿ÉÒÔÊÊÓ¦Ðí¶à¼ÆËã»úºÍ²Ù×÷ϵͳµÄ²îÒ죬ÀýÈ粻ͬ²Ù×÷ϵͳϵͳµÄ»»Ðзû¶¨Òå¡£ +TELNET å�¯ä»¥é€‚应许多计算机和æ“�作系统的差异,例如ä¸�å�Œæ“�作系统系统的æ�¢è¡Œç¬¦å®šä¹‰ã€‚ -## ÍòÎ¬Íø WWW +## 万维网 WWW [HTTP](https://github.com/CyC2018/InterviewNotes/blob/master/notes/HTTP.md) -## µç×ÓÓʼþЭÒé +## 电å­�邮件å��è®® -Ò»¸öµç×ÓÓʼþϵͳÓÉÈý²¿·Ö×é³É£ºÓû§´úÀí¡¢Óʼþ·þÎñÆ÷ÒÔ¼°Óʼþ·¢ËÍЭÒéºÍ¶ÁȡЭÒé¡£ÆäÖз¢ËÍЭÒé³£Óà SMTP£¬¶ÁȡЭÒé³£Óà POP3 ºÍ IMAP¡£ +一个电å­�邮件系统由三部分组æˆ�:用户代ç�†ã€�邮件æœ�务器以å�Šé‚®ä»¶å�‘é€�å��议和读å�–å��议。其中å�‘é€�å��议常用 SMTP,读å�–å��议常用 POP3 å’Œ IMAP。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/de1e46d2-748f-4da3-a29e-7de7bc840366.jpg) ### POP3 -POP3 µÄÌØµãÊÇÖ»ÒªÓû§´Ó·þÎñÆ÷É϶ÁÈ¡ÁËÓʼþ£¬¾Í°Ñ¸ÃÓʼþɾ³ý¡£ +POP3 的特点是å�ªè¦�用户从æœ�务器上读å�–了邮件,就把该邮件删除。 ### IMAP -IMAP ЭÒéÖпͻ§¶ËºÍ·þÎñÆ÷ÉϵÄÓʼþ±£³Öͬ²½£¬Èç¹û²»È¥ÊÖ¶¯É¾³ýÓʼþ£¬ÄÇô·þÎñÆ÷ÉϵÄÓʼþÒ²²»»á±»É¾³ý¡£IMAP ÕâÖÖ×ö·¨¿ÉÒÔÈÃÓû§ËæÊ±ËæµØÈ¥·ÃÎÊ·þÎñÆ÷ÉϵÄÓʼþ¡£IMAP ЭÒéÒ²Ö§³Ö´´½¨×Ô¶¨ÒåµÄÎļþ¼Ð¡£ +IMAP å��议中客户端和æœ�务器上的邮件ä¿�æŒ�å�Œæ­¥ï¼Œå¦‚æžœä¸�去手动删除邮件,那么æœ�务器上的邮件也ä¸�会被删除。IMAP è¿™ç§�å�𿳕å�¯ä»¥è®©ç”¨æˆ·éš�æ—¶éš�地去访问æœ�务器上的邮件。IMAP å��议也支æŒ�创建自定义的文件夹。 ### SMTP -SMTP Ö»ÄÜ·¢ËÍ ASCII Â룬¶ø»¥ÁªÍøÓʼþÀ©³ä MIME ¿ÉÒÔ·¢ËͶþ½øÖÆÎļþ¡£MIME ²¢Ã»Óи͝»òÕßÈ¡´ú SMTP£¬¶øÊÇÔö¼ÓÓʼþÖ÷ÌâµÄ½á¹¹£¬¶¨ÒåÁË·Ç ASCII ÂëµÄ±àÂë¹æÔò¡£ +SMTP å�ªèƒ½å�‘é€� ASCII ç �,而互è�”网邮件扩充 MIME å�¯ä»¥å�‘é€�二进制文件。MIME 并没有改动或者å�–代 SMTP,而是增加邮件主题的结构,定义了é�ž ASCII ç �的编ç �规则。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/ed5522bb-3a60-481c-8654-43e7195a48fe.png) -## ¶¯Ì¬Ö÷»úÅäÖÃЭÒé DHCP +## 动æ€�主机é…�ç½®å��è®® DHCP -DHCP ÌṩÁ˼´²å¼´ÓõÄÁ¬Íø·½Ê½£¬Óû§²»ÔÙÐèҪȥÊÖ¶¯ÅäÖà IP µØÖ·µÈÐÅÏ¢¡£ +DHCP æ��供了å�³æ�’å�³ç”¨çš„连网方å¼�,用户ä¸�å†�需è¦�去手动é…�ç½® IP 地å�€ç­‰ä¿¡æ�¯ã€‚ -DHCP ÅäÖõÄÄÚÈݲ»½öÊÇ IP µØÖ·£¬»¹°üÀ¨×ÓÍøÑÚÂ롢ĬÈÏ·ÓÉÆ÷ IP µØÖ·¡¢ÓòÃû·þÎñÆ÷µÄ IP µØÖ·¡£ +DHCP é…�置的内容ä¸�仅是 IP 地å�€ï¼Œè¿˜åŒ…括å­�网掩ç �ã€�默认路由器 IP 地å�€ã€�域å��æœ�务器的 IP 地å�€ã€‚ -¹¤×÷·½Ê½ÈçÏ£ºÐèÒª IP µØÖ·µÄÖ÷»ú¹ã²¥·¢ËÍ DHCP ·¢ÏÖ±¨ÎÄ£¨½«Ä¿µÄµØÖ·ÖÃΪȫ 1£¬¼´ 255.255.255.255:67£¬Ô´µØÖ·ÉèÖÃΪȫ 0£¬¼´ 0.0.0.0:68£©£¬DHCP ·þÎñÆ÷ÊÕµ½·¢ÏÖ±¨ÎÄÖ®ºó£¬ÔòÔÚ IP µØÖ·³ØÖÐȡһ¸öµØÖ·£¬·¢ËÍ DHCP Ìṩ±¨Îĸø¸ÃÖ÷»ú¡£ +工作方å¼�如下:需è¦� IP 地å�€çš„主机广播å�‘é€� DHCP å�‘现报文(将目的地å�€ç½®ä¸ºå…¨ 1,å�³ 255.255.255.255:67,æº�地å�€è®¾ç½®ä¸ºå…¨ 0,å�³ 0.0.0.0:68),DHCP æœ�务器收到å�‘现报文之å�Žï¼Œåˆ™åœ¨ IP 地å�€æ± ä¸­å�–一个地å�€ï¼Œå�‘é€� DHCP æ��供报文给该主机。 -## µã¶Ôµã´«Êä P2P +## 点对点传输 P2P -°Ñij¸öÎļþ·Ö·¢µÄËùÓжԵȼ¯ºÏ³ÆÎªÒ»¸öºéÁ÷¡£ÎļþµÄÊý¾Ýµ¥Ôª³ÆÎªÎļþ¿é£¬ËüµÄ´óСÊǹ̶¨µÄ¡£Ò»¸öеĶԵȷ½¼ÓÈëij¸öºéÁ÷£¬Ò»¿ªÊ¼²¢Ã»ÓÐÎļþ¿é£¬µ«ÊÇÄܹ»´ÓÆäËü¶ÔµÈ·½ÖÐÖð½¥µØÏÂÔØµ½Ò»Ð©Îļþ¿é£¬Óë´Ëͬʱ£¬ËüҲΪ±ðµÄ¶ÔµÈ·½ÉÏ´«Ò»Ð©Îļþ¿é¡£ +把æŸ�个文件分å�‘的所有对等集å�ˆç§°ä¸ºä¸€ä¸ªæ´ªæµ�。文件的数æ�®å�•元称为文件å�—,它的大å°�是固定的。一个新的对等方加入æŸ�个洪æµ�,一开始并没有文件å�—,但是能够从其它对等方中é€�æ¸�地下载到一些文件å�—,与此å�Œæ—¶ï¼Œå®ƒä¹Ÿä¸ºåˆ«çš„对等方上传一些文件å�—。 -ÿ¸öºéÁ÷¶¼ÓÐÒ»¸ö»ù´¡ÉèÊ©£¬³ÆÎª×·×ÙÆ÷¡£µ±Ò»¸ö¶ÔµÈ·½¼ÓÈëºéÁ÷ʱ£¬±ØÐëÏò×·×ÙÆ÷µÇ¼Ç£¬²¢ÖÜÆÚÐÔµØÍ¨Öª×·×ÙÆ÷ËüÈÔÔÚºéÁ÷ÖС£¿ÉÒÔÔÚÈκÎʱ¼ä¼ÓÈëºÍÍ˳öij¸öºéÁ÷¡£ +æ¯�个洪æµ�都有一个基础设施,称为追踪器。当一个对等方加入洪æµ�时,必须å�‘追踪器登记,并周期性地通知追踪器它ä»�在洪æµ�中。å�¯ä»¥åœ¨ä»»ä½•时间加入和退出æŸ�个洪æµ�。 -Ò»¸öеĶԵȷ½¼ÓÈëºéÁ÷ʱ£¬×·×ÙÆ÷»áËæ»ú´ÓºéÁ÷ÖÐÑ¡ÔñÈô¸É¸ö¶ÔµÈ·½£¬²¢ÈÃжԵȷ½ÓëÕâЩ¶ÔµÈ·½½¨Á¢Á¬½Ó£¬°ÑÕâЩ¶ÔµÈ·½³ÆÎªÏàÁڶԵȷ½¡£½ÓÊպͷ¢ËÍÎļþ¿é¶¼ÊÇÔÚÏàÁڶԵȷ½ÖнøÐС£ +一个新的对等方加入洪æµ�时,追踪器会éš�机从洪æµ�中选择若干个对等方,并让新对等方与这些对等方建立连接,把这些对等方称为相邻对等方。接收和å�‘é€�文件å�—都是在相邻对等方中进行。 -µ±Ò»¸ö¶ÔµÈ·½ÐèÒªºÜ¶àÎļþ¿éʱ£¬Í¨¹ýʹÓÃ×îÏ¡ÓÐÓÅÏȵIJßÂÔÀ´È¡µÃÎļþ¿é£¬Ò²¾ÍÊÇÒ»¸öÎļþ¿éÔÚÏàÁڶԵȷ½Öи±±¾×îÉÙ£¬ÄÇô¾ÍÓÅÏÈÇëÇóÕâ¸öÎļþ¿é¡£ +当一个对等方需è¦�很多文件å�—时,通过使用最稀有优先的策略æ�¥å�–得文件å�—,也就是一个文件å�—在相邻对等方中副本最少,那么就优先请求这个文件å�—。 -µ±ºÜ¶à¶ÔµÈ·½Ïòͬһ¸ö¶ÔµÈ·½ÇëÇóÎļþ¿éʱ£¬¸Ã¶ÔµÈ·½ÓÅÏÈÑ¡ÔñÒÔ×î¸ßËÙÂÊÏòÆä·¢ËÍÎļþ¿éµÄ¶ÔµÈ·½¡£ +当很多对等方å�‘å�Œä¸€ä¸ªå¯¹ç­‰æ–¹è¯·æ±‚文件å�—时,该对等方优先选择以最高速率å�‘å…¶å�‘é€�文件å�—的对等方。 -P2P ÊÇÒ»¸ö·Ö²¼Ê½ÏµÍ³£¬ÈκÎʱºò¶¼ÓжԵȷ½¼ÓÈë»òÕßÍ˳ö¡£Ê¹Ó÷ֲ¼Ê½É¢Áбí DHT£¬¿ÉÒÔ²éÕÒºéÁ÷ÖеÄ×ÊÔ´ºÍ IP µØÖ·Ó³Éä¡£ +P2P 是一个分布å¼�系统,任何时候都有对等方加入或者退出。使用分布å¼�散列表 DHT,å�¯ä»¥æŸ¥æ‰¾æ´ªæµ�中的资æº�å’Œ IP 地å�€æ˜ å°„。 -## Web Ò³ÃæÇëÇó¹ý³Ì +## Web 页é�¢è¯·æ±‚过程 -1. Ïò DNS ·þÎñÆ÷·¢ËÍ DNS ²éѯ±¨ÎÄÀ´½âÎöÓòÃû¡£ +1. å�‘ DNS æœ�务器å�‘é€� DNS 查询报文æ�¥è§£æž�域å��。 -2. ¿ªÊ¼½øÐÐ HTTP »á»°£¬ÐèÒªÏȽ¨Á¢ TCP Á¬½Ó¡£ +2. 开始进行 HTTP 会è¯�,需è¦�先建立 TCP 连接。 -3. ÔÚÔËÊä²ãµÄ´«Êä¹ý³ÌÖУ¬HTTP ±¨Îı»·â×°½ø TCP ÖС£HTTP ÇëÇó±¨ÎÄʹÓö˿ںŠ80£¬ÒòΪ·þÎñÆ÷¼àÌýµÄÊÇ 80 ¶Ë¿Ú¡£Á¬½Ó½¨Á¢Ö®ºó£¬·þÎñÆ÷»áËæ»ú·ÖÅäÒ»¸ö¶Ë¿ÚºÅ¸øÌض¨µÄ¿Í»§¶Ë£¬Ö®ºóµÄ TCP ´«Êä¶¼ÊÇÓÃÕâ¸ö·ÖÅäµÄ¶Ë¿ÚºÅ¡£ +3. 在è¿�输层的传输过程中,HTTP 报文被å°�装进 TCP 中。HTTP 请求报文使用端å�£å�· 80,因为æœ�务器监å�¬çš„æ˜¯ 80 端å�£ã€‚连接建立之å�Žï¼Œæœ�务器会éš�机分é…�一个端å�£å�·ç»™ç‰¹å®šçš„客户端,之å�Žçš„ TCP 传输都是用这个分é…�的端å�£å�·ã€‚ -4. ÔÚÍøÂç²ãµÄ´«Êä¹ý³ÌÖУ¬TCP ±¨ÎĶλᱻ·â×°½ø IP ·Ö×éÖУ¬IP ·Ö×é¾­¹ý·ÓÉÑ¡Ôñ£¬×îºóµ½´ïÄ¿µÄµØ¡£ +4. 在网络层的传输过程中,TCP 报文段会被å°�装进 IP 分组中,IP 分组ç»�过路由选择,最å�Žåˆ°è¾¾ç›®çš„地。 -5. ÔÚÁ´Â·²ã£¬IP ·Ö×é»á±»·â×°½ø MAC Ö¡ÖУ¬IP µØÖ·½âÎö³É MAC µØÖ·ÐèҪʹÓà ARP¡£ +5. 在链路层,IP 分组会被å°�装进 MAC 帧中,IP 地å�€è§£æž�æˆ� MAC 地å�€éœ€è¦�使用 ARP。 -6. ¿Í»§¶Ë·¢ËÍ HTTP ÇëÇó±¨ÎÄ£¬ÇëÇó»ñÈ¡Ò³Ãæ¡£ +6. 客户端å�‘é€� HTTP 请求报文,请求获å�–页é�¢ã€‚ -7. ·þÎñÆ÷·¢ËÍ HTTP ÏàÓ¦±¨ÎÄ£¬¿Í»§¶Ë´Ó¶ø»ñÈ¡¸ÃÒ³Ãæ¡£ +7. æœ�务器å�‘é€� HTTP 相应报文,客户端从而获å�–该页é�¢ã€‚ -8. ä¯ÀÀÆ÷µÃµ½Ò³ÃæÄÚÈÝÖ®ºó£¬½âÎö²¢äÖȾ£¬ÏòÓû§Õ¹Ê¾Ò³Ãæ¡£ +8. æµ�览器得到页é�¢å†…容之å�Žï¼Œè§£æž�并渲染,å�‘用户展示页é�¢ã€‚ -## ³£ÓÃ¶Ë¿Ú +## 常用端å�£ -| Ó¦ÓòãЭÒé | ¶Ë¿ÚºÅ | ÔËÊä²ãЭÒé | +| 应用层å��è®® | 端å�£å�· | è¿�输层å��è®® | | -- | -- | -- | | DNS | 53 | UDP | -| FTP | ¿ØÖÆÁ¬½Ó 21£¬Êý¾ÝÁ¬½Ó 20 | TCP | +| FTP | 控制连接 21,数æ�®è¿žæŽ¥ 20 | TCP | | TELNET | 23 | TCP | | DHCP | 67 68 | UDP | | HTTP | 80 | TCP | @@ -841,7 +936,7 @@ P2P | POP3 | 110 | TCP | | IMAP | 143 | TCP | -# ²Î¿¼×ÊÁÏ +# å�‚考资料 -- ¼ÆËã»úÍøÂç µÚÆß°æ -- ×Ô¶¥ÏòϼÆËã»úÍøÂç +- 计算机网络 第七版 +- 计算机网络——自顶å�‘下方法 diff --git a/pics/TIM截图20180227172950.png b/pics/TIM截图20180227172950.png new file mode 100644 index 00000000..1cb6971e Binary files /dev/null and b/pics/TIM截图20180227172950.png differ