网络--TCP/IP(四)TCP 与 UDP 协议简介
从本节开始,我们开始学习最重要的传输层。传输层位于OSI七层模型的第四层(从下往上)。顾名思义,传输层的作用是实现应用程序间的通信。网络层的作用是保证数据在不同数据链路上传输的可达性,至于如何传输则是由传输层负责。
常见的传输层协议主要有 TCP和UDP 协议。
UDP协议最大的特点就是简单,UDP首部如图:
和UDP首部相比,TCP首部要复杂的多。解析这个首部的时间也会相应的增加,这也是TCP连接的效率低于UDP的原因之一。
TCP是面向有连接的协议,连接在每次通信前被建立,通信结束后被关闭。了解连接建立和关闭的过程通常是考察的重点。连接的建立和关闭可以用一张图来表示:
通常情况下我们认为客户端首先发起连接请求。
1.发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手;
2.接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让发送端发送一个确认数据包,这是第二次握手;
3.最后,发送端发送一个SYN=0,ACK=1的数据包给接收端,告诉它连接已被确认,这就是第三次握手。之后,一个TCP连接建立,开始通讯。
*SYN:同步标志
同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。
*ACK:确认标志
确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
*RST:复位标志
复位标志有效。用于复位相应的TCP连接。
*URG:紧急标志
紧急(The urgent pointer) 标志有效。紧急标志置位,
*PSH:推标志
该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。
*FIN:结束标志
带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据
根据一般思路,我们认为第三次是多余的,TCP协议为什么还要增加第三次的握手呢?
这是因为在网络请求的时候,我们应该时刻记住“网络是不安全的,数据包是可能丢失的”。假设没有第三次确认,客户端向服务端发送了SYN包,请求建立连接。由于网络原因,服务器没有及时收到这个包,于是客户端重新发送了SYN包。正常建立了连接。此时超时的那个确认包到达了服务端,如果是两次握手此连接就建立了,服务端就建立了一个空连接,白白浪费资源。如果是三次,客户端判断这个确认包是无效的,就丢弃了。
三次握手实际其实解决了第二步丢包问题。那么第三步的ACK包丢失了,TCP协议是如何处理的呢?
按照TCP协议处理丢包问题的一般方法,服务器会重新向客户端发送确认包,知道ACK确认为止。但实际上这种做法有可能遭到SYN泛洪攻击。所谓的泛洪攻击,是指发送方伪造多个IP地址,模拟三次握手的过程。当服务器返回ACK后,攻击方故意不确认,从而使服务器不断重发ACK。由于服务器长时间处于半连接状态,最后消耗过多的CUP和内存资源导致死机。
所以服务端采用的是这种方法,发送RST数据包,进入close状态,这个RST数据包中的TCP首部中的控制位中的RST位被置为1。这表示连接信息全部被初始化,原有的TCP通信不能继续。客户端如果还想建立TCP连接,需要从第一步握手重新开始。
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。
绛旓細TCP/IP鍗忚鍗充簰鑱旂綉鍗忚锛屾槸涓涓缃戠粶閫氫俊妯″瀷锛屼互鍙婁竴鏁翠釜缃戠粶浼犺緭鍗忚瀹舵棌锛屼负浜掕仈缃戠殑鍩虹閫氫俊鏋舵瀯銆俆CP/IP浼犺緭鍗忚锛屽嵆浼犺緭鎺у埗/缃戠粶鍗忚锛屼篃鍙仛缃戠粶閫氳鍗忚銆傚畠鏄湪缃戠粶鐨勪娇鐢ㄤ腑鐨勬渶鍩烘湰鐨勯氫俊鍗忚銆俆CP/IP浼犺緭鍗忚瀵逛簰鑱旂綉涓悇閮ㄥ垎杩涜閫氫俊鐨勬爣鍑嗗拰鏂规硶杩涜浜嗚瀹氥傚苟涓旓紝TCP/IP浼犺緭鍗忚鏄繚璇佺綉缁...
绛旓細TCP鏄竴绉嶄紶杈撴帶鍒跺崗璁紝鏄潰鍚戣繛鎺ョ殑銆佸彲闈犵殑銆佸熀浜庡瓧鑺傛祦涔嬮棿鐨勪紶杈撳眰閫氫俊鍗忚锛岀敱IETF鐨凴FC 793瀹氫箟銆傚湪绠鍖栫殑璁$畻鏈缃戠粶OSI妯″瀷涓紝TCP瀹屾垚绗洓灞備紶杈撳眰鎵鎸囧畾鐨勫姛鑳斤紝鐢ㄦ埛鏁版嵁鎶ュ崗璁紙UDP锛夋槸鍚屼竴灞傚唴鍙︿竴涓噸瑕佺殑浼犺緭鍗忚銆傚湪鍥犵壒缃戝崗璁棌锛Internet protocol suite锛夐噷闈紝TCP灞傛槸鍦↖P灞備笂闈紝搴旂敤...
绛旓細TCP锛圱ransmission Control Protocol 浼犺緭鎺у埗鍗忚锛夋槸涓绉嶉潰鍚戣繛鎺ョ殑銆佸彲闈犵殑銆佸熀浜庡瓧鑺傛祦鐨勪紶杈撳眰閫氫俊鍗忚锛岀敱IETF鐨凴FC 793瀹氫箟銆傚湪绠鍖栫殑璁$畻鏈缃戠粶OSI妯″瀷涓紝瀹冨畬鎴愮鍥涘眰浼犺緭灞傛墍鎸囧畾鐨勫姛鑳斤紝鐢ㄦ埛鏁版嵁鎶ュ崗璁紙UDP锛夋槸鍚屼竴灞傚唴鍙︿竴涓噸瑕佺殑浼犺緭鍗忚銆傚湪鍥犵壒缃戝崗璁棌锛Internet protocol suite锛変腑锛孴CP...
绛旓細甯歌缃戠粶鍗忚TCP/IP鍗忚:浼犺緭鎺у埗鍗忚/浜掕仈缃戜簰鑱斿崗璁紝鍙堢О缃戠粶閫氫俊鍗忚锛屾槸浜掕仈缃戞渶鍩烘湰鐨勫崗璁紝鏄簰鑱旂綉鐨勫熀纭銆傚畠鐢辩綉缁滃眰鐨処P鍗忚鍜屼紶杈撳眰鐨凾CP鍗忚缁勬垚銆俇DP鍗忚:UDP鏄竴绉嶆棤杩炴帴鐨勯氫俊鍗忚銆俇DP鏁版嵁鍖呮嫭鐩殑绔彛鍙峰拰婧愮鍙e彿淇℃伅銆傚洜涓洪氫俊涓嶉渶瑕佽繛鎺ワ紝鎵浠ュ彲浠ュ箍鎾侶ttp鍗忚:HTTP鍗忚瀹為檯涓婃槸瓒呮枃...
绛旓細TCP/IP鍗忚鏄竴濂楃敤浜庡湪Internet涓婁簰鑱缃戠粶璁惧鐨勯氫俊鍗忚;鍙互鐢ㄤ綔涓撶敤缃戠粶(鍐呰仈缃戞垨澶栬仈缃)涓殑閫氫俊鍗忚銆傚畠鏃ㄥ湪寤虹珛缃戠粶杩炴帴锛屼负涓绘満鎻愪緵瀵逛簰鑱旂綉鐨勮闂備簰鑱旂綉鍗忚鏃廡CP/IP琚垝鍒嗕负鍥涘眰锛岃嚜涓嬪埌涓婂垝鍒嗭細缃戠粶鎺ュ彛灞傘佺綉缁滀簰杩炲眰銆佷紶杈撳眰銆佸簲鐢ㄥ眰銆傝繖鍥涘眰鐨勬瘡涓灞傝捣鍒扮殑浣滅敤閮戒笉鐩稿悓銆俛. 缃戠粶鎺ュ彛...
绛旓細TCP/IP鏄竴涓簰鑱旂綉閫氫俊鍗忚銆備簰鑱旂綉鍗忚鏄竴涓缃戠粶閫氫俊妯″瀷锛屼互鍙婁竴鏁翠釜缃戠粶浼犺緭鍗忚瀹舵棌锛屼负浜掕仈缃戠殑鍩虹閫氫俊鏋舵瀯銆傚畠甯歌閫氱О涓篢CP/IP鍗忚鏃忥紙鑻辫锛歍CP/IP Protocol Suite锛屾垨TCP/IP Protocols锛夛紝绠绉癟CP/IP銆俆CP / IP锛堜紶杈撴帶鍒跺崗璁/浜掕仈缃戝崗璁級锛屼篃绉颁负浜掕仈缃戝崗璁浠讹紝鏄竾缁寸綉鐨勬牳蹇冮氫俊...
绛旓細Window, cwnd)锛氬畠鐢ㄤ簬鎺у埗鍦ㄤ竴涓TCP杩炴帴涓彲浠ュ彂閫佺殑鏁版嵁閲忥紝鍏剁洰鐨勬槸闃叉缃戠粶鎷ュ銆俢wnd鐨勫间細鏍规嵁缃戠粶鐨勬嫢濉炵▼搴﹀姩鎬佽皟鏁达紝閫氬父鐢盩CP鐨勬嫢濉炴帶鍒剁畻娉曪紙濡傛參鍚姩銆佹嫢濉為伩鍏嶃佸揩閫熼噸浼犲拰蹇熸仮澶嶏級鏉ョ鐞嗐傝繖浜涚獥鍙e叡鍚屼綔鐢紝纭繚TCP杩炴帴鐨勬暟鎹紶杈撴棦鏈夋晥鐜囧張涓嶄細瀵艰嚧缃戠粶鎷ュ鎴栨帴鏀舵柟缂撳啿鍖烘孩鍑恒
绛旓細TCP/IP(Transmission Control Protocol/Internet Protocol) 鍗充紶杈撴帶鍒跺崗璁/缃戦棿鍗忚锛屾槸涓涓伐涓氭爣鍑嗙殑鍗忚闆嗭紝瀹冩槸涓哄箍鍩熺綉锛圵AN锛夎璁$殑銆傚畠鏄敱ARPANET缃戠殑鐮旂┒鏈烘瀯鍙戝睍璧锋潵鐨勩俆CP/IP鐨勬爣鍑嗗湪涓绯诲垪绉颁负RF C鐨勬枃妗d腑鍏竷銆傛枃妗g敱鎶鏈笓瀹躲佺壒鍒伐浣滅粍銆佹垨RFC缂栬緫淇銆傚叕甯冧竴涓枃妗f椂锛岃鏂囨。琚祴浜...
绛旓細TCP/IP鍖呮嫭璁稿璁$畻鏈缃戠粶鍗忚銆俆CP 鍜 IP 鍙槸鍏朵腑鐨勪袱涓俆CP浠h〃浠涔堬紵瀹冩槸浼犺緭鎺у埗鍗忚鐨勭缉鍐欙紝璐熻矗灏嗘暟鎹粠涓鍙拌澶囦紶閫佸埌鍙︿竴鍙拌澶囥侷P浠h〃浜掕仈缃戝崗璁傝鍗忚鐨勪换鍔℃槸鏌ユ壘鐩爣 IP 鍦板潃銆傚湪鏁版嵁浼犺緭杩囩▼涓紝姣忎釜浜洪兘鏈夎嚜宸辩殑浠诲姟锛屼絾閮芥湞鐫鐩稿悓鐨勬渶缁堢粨鏋滃姫鍔涖俆CP/IP锛氬洓灞 TCP/IP 鏄竴缁...
绛旓細TCP---浼犺緭鎺у埗鍗忚,鎻愪緵鐨勬槸闈㈠悜杩炴帴銆佸彲闈犵殑瀛楄妭娴佹湇鍔°傚綋瀹㈡埛鍜屾湇鍔″櫒褰兼浜ゆ崲鏁版嵁鍓嶏紝蹇呴』鍏堝湪鍙屾柟涔嬮棿寤虹珛涓涓猅CP杩炴帴锛屼箣鍚庢墠鑳戒紶杈撴暟鎹俆CP鎻愪緵瓒呮椂閲嶅彂锛屼涪寮冮噸澶嶆暟鎹紝妫楠屾暟鎹紝娴侀噺鎺у埗绛夊姛鑳斤紝淇濊瘉鏁版嵁鑳介『搴忓湴浠庝竴绔紶鍒板彟涓绔俇DP---鐢ㄦ埛鏁版嵁鎶ュ崗璁紝鏄竴涓畝鍗曠殑闈㈠悜鏁版嵁鎶ョ殑杩愯緭灞傚崗璁...