三次握手和四次揮手

TCP/IP是一個協議棧,包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等許多協議
傳輸層通過port號,確定應用層協議  Port number:  tcp:傳輸控制協議,面向連接的協議;通信前需要建立虛擬鏈路;結束後 拆除鏈路 0-65535  udp:User Datagram Protocol,無連接的協議 0-65535  IANA:互聯網數字分配機構(負責域名,數字資源,協議分配)

0-1023:系統端口或特權端口(僅管理員可用) ,衆所周知,永久的 分配給固定的系統應用使用,22/tcp(ssh), 80/tcp(http), 443/tcp(https)
1024-49151:用戶端口或註冊端口,但要求並不嚴格,分配給程序 註冊爲某應用使用,1433/tcp(SqlServer),1521/tcp(oracle), 3306/tcp(mysql),11211/tcp/udp (memcached) 49152-65535:動態端口或私有端口,客戶端程序隨機使用的端口 其範圍的定義:/proc/sys/net/ipv4/ip_local_port_range


問tcp和udp不同
tcp安全,需要三次握手
udp不安全,直接發

三次握手和四次揮手

第一次握手
客戶端和服務器都是closed
客戶端主動打開發送syn=1,seq=x,發送x數據包,x是數據包編號
服務器收到處於監聽狀態linsten,客戶端變成syn-sent
當客戶端向服務器發起連接請求時,客戶端會發送同步序列標號SYN到服務器,在這裏我們設SYN爲m,等待服務器確認,這時客戶端的狀態爲SYN_SENT。
第二次握手服務器返回syn ack 服務器數據包seq=y個數據包,ack=x+1表示自己收到了,下次發送x+1個數據包,ACK是確認號,服務端編程syn-rcvd
第三次握手:客戶端發送seq=x+1數據包,ack=y+1,y+1是服務端發送了y包,我要回應我收到了y包,發送y+1,

客戶端變成estab-lished建立鏈接,服務端變成bestab-lished
如果是兩次,客戶端就不知道服務端有沒有收到
四次就浪費了,相當於確認兩次


四次揮手三次握手和四次揮手

第一次揮手
A端向B端請求斷開連接時會向B端發送一個帶有FIN標記的報文段,這裏的FIN是FINish的意思,客戶端狀態fin-wait1。
fin位=1
客戶端向服務器端請求斷開連接時會向服務器端發送一個帶有FIN標記的報文段,fin=1,這裏的FIN是FINish的意思。
第二次揮手,服務器收到fin標記後,發送一個確認標記位ACK=1,我收到了,服務器狀態變成close-wait
第三次揮手
第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。
第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號爲收到序號+1,Server進入CLOSED狀態,完成四次揮手
2MSL數據包生存期

四、附註
  關於三次握手與四次揮手通常都會有典型的面試題,在此提出供有需求的XDJM們參考:
  (1)三次握手是什麼或者流程?四次握手呢?答案前面分析就是。
  (2)爲什麼建立連接是三次握手,而關閉連接卻是四次揮手呢?
 
  這是因爲服務端在LISTEN狀態下,收到建立連接請求的SYN報文後,把ACK和SYN放在一個報文裏發送給客戶端。而關閉連接時,當收到對方的FIN報文時,僅僅表示對方不再發送數據了但是還能接收數據,己方也未必全部數據都發送給對方了,所以己方可以立即close,也可以發送一些數據給對方後,再發送FIN報文給對方來表示同意現在關閉連接,因此,己方ACK和FIN一般都會分開發送。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章