1. 程式人生 > 其它 >group by 和 over(partition by)的區別

group by 和 over(partition by)的區別

###三次握手 TCP是面向連線的協議。TCP建立連線的過程叫做握手,握手需要在客戶和伺服器之間交換三個TCP報文段。 三次握手示意圖:

三次揮手過程: 如圖,主機A是客戶端,B是伺服器,起初兩端的TCP程序都處於CLOSE(關閉)狀態。主機下面的方框代表TCP程序所處的狀態。 首先是A向伺服器B發出請求連線報文段,傳送的內容為 SYN = 1,seq = x。TCP客戶端進入SYN-SENT(同步已傳送)狀態。SYN是TCP首部的同步位,在建立連線時用來同步序號。SYN = 1表明這個報文是連線請求或者連線接受報文。seq是指報文段序號,因為TCP是面向位元組流的(但是傳送的是報文段,也就是包含多個位元組),在TCP連線中傳送的位元組流中的每一個位元組都按序號編號,這個seq就是這個報文段所傳送資料的第一個位元組的序號 B收到請求報文段後,則向A傳送確認報文,內容是SYN = 1,ACK = 1,seq = y,ack = x + 1。B進入SYN-RCVD(同步已傳送)狀態。這裡ACK是表示確認(acknowledgement),TCP中規定在建立連線後所有傳送的報文段都要把ACK置為1,當ACK = 0時,報文無效。seq = y 是確認報文第一個欄位用y表示。ack是確認號,是期望收到對方下一個報文段的第一個資料位元組的序號,這裡ack = x +1 表明B已經收到了x號以前的報文,如果A再發報文過來,我希望報文第一個位元組序號為x+1,但是A請求連線時傳送seq = x,這裡就說明了A向B傳送的請求報文只有一個位元組,是的,這就是TCP中的規定,SYN = 1的報文不能攜帶資料,但是要消耗掉一個序號 客戶端收到B的確認後,還要向B發出確認,確認報文為ACK = 1,ack =y+1,seq = x + 1。A進入ESTABLISHED(已建立連線)狀態,B收到A的確認後也進入ESTABLISHED(已建立連線)狀態 ###四次揮手 資料傳輸結束後,客戶端和伺服器都可以釋放連線。 四次揮手示意圖:

四次揮手過程: 目前A和B都處於ESTABLISHED(已建立連線)狀態。這個過程簡單來說就是A說我要關閉了,B回答說我知道了,B說我要關閉了,A回答說我知道了,然後就都關閉了。 A先發出連線釋放報文段,主動關閉TCP連線,報文內容為FIN = 1,seq = u,A進入FIN-WAIT-1(終止等待1)狀態。FIN(finis)表示終止,FIN = 1 時,表明此報文段的傳送方的資料已經發送完畢,並要求釋放連線。FIN報文段不攜帶資料,但是消耗一個序號。 B收到連線釋放報文段後發出確認,報文內容為ACK = 1,seq = v,ack = u+1,B進入CLOSE-WAIT(關閉等待)狀態,A收到B的確認後進入FIN-WAIT-2(終止等待2)轉態。 若B沒有要向A傳送的資料,B就傳送連線釋放報文,報文內容FIN = 1,ACK = 1,seq = w,ack = u+1。B進入LAST-ACK(最後確認)狀態。這裡B還要重複傳送已經發送過的確認號ack = 1。 A收到B的連線釋放報文後對此進行確認,確認報文為ACK = 1 ,seq = u+1,ack = w+1,A進入TIME-WAIT(時間等待)狀態。要注意的是,現在TCP連線還沒有沒釋放,必須經過時間等待計時器設定的時間2*MSL後,A才進入CLOSE狀態。MSL(maximum segment lifetime)是最長報文段壽命。