π‘ [TCP] 3-way Handshake & 4-way Handshake: μλ²½ κ°μ΄λ
TCP(Transmission Control Protocol)μμ λ°μ΄ν° μ μ‘ μ μ μ°κ²°μ μ€μ νκ³ μ’
λ£νλ κ³Όμ μ λ§€μ° μ€μν©λλ€. μ΄ κΈμμλ 3-way Handshakeμ 4-way Handshakeμ λν΄ μμΈν μ€λͺ
ν©λλ€. μ΄ κ³Όμ λ€μ TCPμ μ λ’°μ± μλ ν΅μ μ 보μ₯νλ λ° ν΅μ¬μ μΈ μν μ ν©λλ€.
TCP ν€λ
- TCP ν€λλ μ‘μ μμ μμ μ κ°μ λ°μ΄ν°λ₯Ό μ λ¬νλ©΄μ κ·Έ κ³Όμ μμ λ°μν μ μλ λ€μν λ¬Έμ λ₯Ό ν΄κ²°νλ λ° νμν μ 보λ₯Ό ν¬ν¨ν©λλ€. TCP ν€λλ κ³ μ λ 20 λ°μ΄νΈμ κΈ°λ³Έ ν€λμ μ νμ μΈ μΆκ° μ΅μ
νλλ‘ κ΅¬μ±λ©λλ€.
μ£Όμ νλ
- μΆλ°μ§ ν¬νΈ (Source Port, 16λΉνΈ)
- λ°μ΄ν°λ₯Ό μ‘μ νλ μ ν리μΌμ΄μ
μ΄ μ¬μ©ν ν¬νΈ λ²νΈμ
λλ€.
- ν΄λΌμ΄μΈνΈμ μλ² κ°μ ν΅μ μμ ν΄λΌμ΄μΈνΈ μΈ‘ ν¬νΈ λ²νΈλ‘ μ¬μ©λ©λλ€.
- λͺ©μ μ§ ν¬νΈ (Destination Port, 16λΉνΈ)
- λ°μ΄ν°λ₯Ό μμ ν μ ν리μΌμ΄μ
μ΄ μ¬μ©ν ν¬νΈ λ²νΈμ
λλ€.
- μλ² μΈ‘μμ νΉμ μ ν리μΌμ΄μ
μΌλ‘ λ°μ΄ν°λ₯Ό μ λ¬ν λ μ¬μ©λ©λλ€.(μ: HTTPλ 80λ² ν¬νΈ, HTTPSλ 443λ² ν¬νΈ)
- ν¬νΈ λ²νΈλ μ¦, μ΄λ€ μλΉμ€(μ¬κΈ°μλ HTTPλ HTTPS)
- μμ λ²νΈ (Sequence Number, 32λΉνΈ)
- μ‘μ λ λ°μ΄ν°μ λ°μ΄νΈ μμΉλ₯Ό λνλ΄λ λ²νΈμ
λλ€.
- TCPλ λ°μ΄ν° μ€νΈλ¦Όμ μμ μΈκ·Έλ¨ΌνΈλ‘ λλμ΄ μ μ‘νλ―λ‘, μμ λ²νΈλ₯Ό ν΅ν΄ κ° μΈκ·Έλ¨ΌνΈμ μμΉλ₯Ό μΆμ νκ³ μ¬λ°λ₯Έ μμλ‘ μ¬μ‘°λ¦½ν μ μμ΅λλ€.
- νμΈ μλ΅ λ²νΈ (Acknowledgement Number, 32λΉνΈ)
- μμ μκ° λ€μμ μμ νκΈ°λ₯Ό κΈ°λνλ κΈ°λνλ λ°μ΄νΈμ μμ λ²νΈμ
λλ€.
- μ‘μ μλ μ΄ λ²νΈλ₯Ό νμΈν¨μΌλ‘μ¨ μμ μκ° λ°μ΄ν°λ₯Ό μ μμ μΌλ‘ λ°μλμ§ μ μ μμ΅λλ€.
- λ°μ΄ν° μ€νμ
(Data Offset, 4λΉνΈ)
- TCP ν€λμ κΈΈμ΄λ₯Ό λνλ΄λ νλμ
λλ€. μ΄ κ°μ TCP ν€λμ μμλΆν° λ°μ΄ν°κ° μμλλ μμΉκΉμ§μ κΈ°λ§λ₯Ό 4λ°μ΄νΈ λ¨μλ‘ λνλ
λλ€.
- μ΅μ κ°μ 5(20λ°μ΄νΈ)λ‘, κΈ°λ³Έ TCP ν€λ ν¬κΈ°λ₯Ό λνλ
λλ€.
- μμ½ (Reserved, 3λΉνΈ)
- λ―Έλμ μ¬μ©μ μν΄ μμ½λ νλμ
λλ€.
- νμ¬λ μ¬μ©λμ§ μμΌλ©°, νμ 0μΌλ‘ μ€μ λ©λλ€.
- **νλκ·Έ (Flags, 9λΉνΈ)
- TCP μΈκ·Έλ¨ΌνΈμ μνλ₯Ό λνλ΄λ μ μ΄ λΉνΈμ
λλ€. κ° νλκ·Έλ νΉμ μ μ΄ κΈ°λ₯μ μνν©λλ€.
- URG (Urgent) : κΈ΄κΈ ν¬μΈν° νλκ° μ ν¨ν¨μ λνλ
λλ€.
- ACK (Acknowledgment) : νμΈ μλ΅ λ²νΈ νλκ° μ ν¨ν¨μ λνλ
λλ€.
- PSH (Push) : λ°μ΄ν°λ₯Ό μ¦μ μ λ¬νλλ‘ μμ²ν©λλ€.
- RST (Reset) : μ°κ²°μ μ¬μ€μ ν©λλ€.
- SYN (Synchronize) : μ°κ²° μ€μ μ μμν©λλ€.
- FIN (Finish) : μ°κ²°μ μ’
λ£ν©λλ€.
- **μλμ° ν¬κΈ° (Window Size, 16λΉνΈ)
- μμ μκ° μμ ν μ μλ μ΅λ λ°μ΄ν° ν¬κΈ°λ₯Ό λνλ
λλ€.
- TCPμ νλ¦ μ μ΄ λ©μ»€λμ¦μ μΌλΆλ‘, μ‘μ μκ° λ무 λ§μ λ°μ΄ν°λ₯Ό 보λ΄μ§ μλλ‘ μ‘°μ ν©λλ€.
- **체ν¬μ¬ (Checksum, 16λΉνΈ)
- TCP ν€λμ λ°μ΄ν°λ₯Ό ν¬ν¨ν μΈκ·Έλ¨ΌνΈμ μ€λ₯λ₯Ό κ²μΆνκΈ° μν νλμ
λλ€.
- μ‘μ μΈ‘μμ κ³μ°λ 체ν¬μ¬μ΄ μμ μΈ‘μμ λ€μ κ³μ°λ κ°κ³Ό μΌμΉνμ§ μμΌλ©΄ μ€λ₯κ° λ°μν κ²μΌλ‘ κ°μ£Όλ©λλ€.
- κΈ΄κΈ ν¬μΈν° (Urgent Pointer, 16λΉνΈ)
- URG νλκ·Έκ° μ€μ λ κ²½μ° μ¬μ©λλ©°, κΈ΄κΈ λ°μ΄ν°λ₯Ό νμνλ λ° μ¬μ©λ©λλ€.
- λ°μ΄ν° μ€νΈλ¦Ό λ΄μ κΈ΄κΈ λ°μ΄ν°κ° λλλ μμΉλ₯Ό μ§μ ν©λλ€.
- μ΅μ
(Options, κ°λ³ κΈΈμ΄)
- TCP ν€λμ κΈ°λ³Έ νλ μΈμ μΆκ°μ μΈ κΈ°λ₯μ μ 곡νκΈ° μν΄ μ¬μ©λ©λλ€.
- μ: μ νμ ACK(SACK), μ΅λ μΈκ·Έλ¨ΌνΈ ν¬κΈ°(MSS) μ§μ λ±μ΄ κ°λ₯ν©λλ€.
- ν¨λ© (Padding, κ°λ³ κΈΈμ΄)
- TCP ν€λμ κΈΈμ΄κ° 32λΉνΈ(4λ°μ΄νΈ)μ λ°°μκ° λλλ‘ μ±μμ§λ νλμ
λλ€.
- μ΄λ λ°μ΄ν° μ λ ¬μ λ§μΆκΈ° μν΄ μ¬μ©λ©λλ€.
π€ 3-way Handshake - μ°κ²° μ±λ¦½
TCPλ λ°μ΄ν°λ₯Ό μ ννκ² μ μ‘νκΈ° μν΄ μ°κ²°μ μ±λ¦½νλ κ³Όμ μ΄ νμν©λλ€. μ΄ κ³Όμ μ΄ λ°λ‘ 3-way Handshakeμ
λλ€.
-
SYN (Synchronize):
- ν΄λΌμ΄μΈνΈ(μ°κ²°μ μμνλ €λ μ₯μΉ)κ° μλ²(μ°κ²°μ λ°μ μ₯μΉ)μκ² SYN ν¨ν·μ 보λ
λλ€. μ΄ ν¨ν·μ μ°κ²°μ μμνκ³ μΆλ€λ μ νΈλ₯Ό λνλ
λλ€.
- μ΄λ, ν΄λΌμ΄μΈνΈλ μ΄κΈ° μνμ€ λ²νΈ(Sequence Number)λ₯Ό μ€μ νμ¬ μ μ‘ν©λλ€. μ΄ λ²νΈλ λ°μ΄ν°μ μμλ₯Ό κ΄λ¦¬νλ λ° μ¬μ©λ©λλ€. ( seq = x )
- μνμ€ λ²νΈλ ν΄λΌμ΄μΈνΈ μΈ‘μμ λ°μ΄ν° μ μ‘μ΄ μμλ λ μ¬μ©νλ 첫 λ²μ§Έ ν¨ν· λ²νΈλ₯Ό μλ―Έν©λλ€.
-
SYN-ACK (Synchronize-Acknowledge):
- μλ²λ ν΄λΌμ΄μΈνΈλ‘λΆν° SYN ν¨ν·μ λ°μΌλ©΄, μ΄λ₯Ό μλ½νλ μλ―Έλ‘ SYN-ACK ν¨ν·μ 보λ
λλ€.
- μ΄ ν¨ν·μλ μλ²μ μνμ€ λ²νΈ ( seq = y ) μ ν΄λΌμ΄μΈνΈμ SYN μμ²μ νμΈνλ€λ μλ―Έμ ACK(Acknowledgment) λ²νΈ ( ack = x+1 ) κ° ν¬ν¨λ©λλ€.
- seq = yλ μλ² μΈ‘μμ λ°μ΄ν° μ μ‘μ΄ μμλ λ μ¬μ©νλ 첫 λ²μ§Έ λ²νΈλ₯Ό μλ―Έν©λλ€. λμμ, ACK λ²νΈλ ν΄λΌμ΄μΈνΈκ° λ³΄λΈ μνμ€ λ²νΈ xλ₯Ό μ λ°μκ³ , λ€μμ λ°μ λ°μ΄ν°λ x+1λΆν°λΌλ μλ―Έμ
λλ€.
- SYN-ACK ν¨ν·μ ν΄λΌμ΄μΈνΈμκ² "λλ μ€λΉκ° λμκ³ , λμ μμ²μ λ°μμ΄"λΌλ μλ΅μ μλ―Έν©λλ€.
-
ACK (Acknowledge):
- ν΄λΌμ΄μΈνΈλ μλ²λ‘λΆν° SYN-ACK ν¨ν·μ λ°μΌλ©΄, μ°κ²°μ΄ μ±κ³΅μ μΌλ‘ μ€μ λμμμ μ리기 μν΄ ACK ν¨ν·μ λ€μ μλ²λ‘ 보λ
λλ€.
- μ΄λ ν΄λΌμ΄μΈνΈλ μλ²κ° λ³΄λΈ μνμ€ λ²νΈ yμ 1μ λν κ°μ ACK λ²νΈλ‘ μ€μ νμ¬ ACK = y+1μ 보λ
λλ€. μ΄ ACK λ²νΈλ μλ²κ° λ³΄λΈ yλ₯Ό μ λ°μκ³ , λ€μμ λ°μ λ°μ΄ν°λ y+1λΆν°λΌλ μλ―Έμ
λλ€.
- μ΄ ν¨ν·μ μλ²μ μνμ€ λ²νΈλ₯Ό νμΈνλ©°, μ΄μ λ°μ΄ν° μ μ‘μ΄ κ°λ₯ν μνμμ μ립λλ€.
μ΄λ κ² 3λ²μ ν΅μ μ΄ μλ£λλ©΄ μ°κ²°μ΄ μ±λ¦½λ©λλ€. (μ΄ κ³Όμ μ 3-way HandshakeλΌκ³ λΆλ¦
λλ€)
πͺ 4-way Handshake - μ°κ²° ν΄μ
μ°κ²° μ±λ¦½ ν, TCP μ°κ²°μ μμ νκ² μ’
λ£νκΈ° μν΄ 4-way Handshake κ³Όμ μ΄ μ΄λ£¨μ΄μ§λλ€.
-
FIN (Finish) ν¨ν· μ μ‘:
- ν΄λΌμ΄μΈνΈκ° μ°κ²°μ μ’
λ£νκΈ°λ‘ κ²°μ νλ©΄, μλ²μκ² FIN ν¨ν·μ 보λ
λλ€.
- μ΄ ν¨ν·μ "λ μ΄μ λ°μ΄ν°λ₯Ό μ μ‘νμ§ μκ² λ€"λ μ νΈλ₯Ό λνλ΄λ©°, ν΄λΌμ΄μΈνΈλ λ μ΄μ λ°μ΄ν°λ₯Ό 보λ΄μ§ μκ² λ€λ μμ¬λ₯Ό ννν©λλ€.
- μ΄λ ν΄λΌμ΄μΈνΈλ FIN ν¨ν·μ νμ¬μ μνμ€ λ²νΈλ₯Ό ν¬ν¨μν΅λλ€.
- ν΄λΌμ΄μΈνΈλ FIN_WAIT_1 μνμ μ§μ
ν©λλ€. μ¦, ν΄λΌμ΄μΈνΈλ μλ²μκ² FIN ν¨ν·μ 보λ΄κ³ ACK μλ΅μ κΈ°λ€λ¦¬λ μνμ
λλ€.
-
ACK (Acknowledge) ν¨ν· μ μ‘:
- μλ²λ ν΄λΌμ΄μΈνΈλ‘λΆν° FIN ν¨ν·μ λ°μΌλ©΄, μ΄λ₯Ό νμΈνλ€λ μλ―Έλ‘ ACK ν¨ν·μ ν΄λΌμ΄μΈνΈλ‘ 보λ
λλ€.
- μ΄ ν¨ν·μ "FIN ν¨ν·μ μ λ°μκ³ , λλ μμλ€"λ μλ―Έλ₯Ό λνλ
λλ€. νμ§λ§ μ΄ λ¨κ³μμ μλ²λ μ¬μ ν ν΄λΌμ΄μΈνΈμκ² λ°μ΄ν°λ₯Ό λ³΄λΌ μ μμ΅λλ€.
- ACK ν¨ν·μ ν΄λΌμ΄μΈνΈμ μνμ€ λ²νΈμ λν μλ΅μΌλ‘, ACK λ²νΈλ ν΄λΌμ΄μΈνΈκ° λ³΄λΈ FIN ν¨ν·μ μνμ€ λ²νΈμ 1μ λν κ°μ΄ λ©λλ€.
- μλ²λ CLOSE_WAIT μνλ‘ μ§μ
ν©λλ€. μ¦, μλ²λ ν΄λΌμ΄μΈνΈμ FINμ λ°μλ€μκ³ , μμ§ μλ²μμ μ μ‘ν λ°μ΄ν°κ° λ¨μ μλ κ²½μ°, μ΄ λ°μ΄ν°λ₯Ό λ§λ¬΄λ¦¬νλ λ¨κ³μ μμ΅λλ€. ν΄λΌμ΄μΈνΈλ μλ²λ‘λΆν° ACK ν¨ν·μ λ°μ ν, FIN_WAIT_2 μνμ μ§μ
ν©λλ€. μ¦, μλ²λ‘λΆν° ACKλ₯Ό λ°κ³ μ΄μ μλ²μ FIN ν¨ν·μ κΈ°λ€λ¦¬κ³ μλ μνμ
λλ€.
-
μλ²μ FIN ν¨ν· μ μ‘:
- μλ²λ μ΄μ λ°μ΄ν°λ₯Ό λͺ¨λ μ μ‘νκ³ μ°κ²°μ μ’
λ£ν μ€λΉκ° λλ©΄, FIN ν¨ν·μ ν΄λΌμ΄μΈνΈμκ² λ³΄λ
λλ€.
- μ΄ FIN ν¨ν·μ μλ²κ° λ μ΄μ λ°μ΄ν°λ₯Ό 보λ΄μ§ μκ² λ€λ μμ¬λ₯Ό ν΄λΌμ΄μΈνΈμκ² μ λ¬ν©λλ€. μ΄λ μλ²λ μμ μ μνμ€ λ²νΈλ₯Ό ν¬ν¨μμΌ μ μ‘ν©λλ€.
- μλ²λ LAST_ACK μνλ‘ μ§μ
ν©λλ€. μ¦, μλ²λ ν΄λΌμ΄μΈνΈμκ² FIN ν¨ν·μ λ³΄λΈ ν, ν΄λΌμ΄μΈνΈμ μ΅μ’
ACK μλ΅μ κΈ°λ€λ¦¬λ μνμ
λλ€.
-
ν΄λΌμ΄μΈνΈμ ACK ν¨ν· μ μ‘:
- ν΄λΌμ΄μΈνΈλ μλ²λ‘λΆν° FIN ν¨ν·μ λ°μΌλ©΄, μ΄λ₯Ό νμΈνκ³ ACK ν¨ν·μ μλ²λ‘ 보λ
λλ€.
- μ΄ ACK ν¨ν·μ μλ²μ FIN ν¨ν·μ λν μλ΅μ΄λ©°, μλ²κ° λ³΄λΈ μνμ€ λ²νΈμ 1μ λν ACK λ²νΈλ₯Ό ν¬ν¨ν©λλ€.
- μ΄ ν¨ν·μ΄ μ μ‘λ ν, μ°κ²°μ΄ μμ ν μ’
λ£λ©λλ€.
- ν΄λΌμ΄μΈνΈλ TIME_WAIT μνλ‘ μ§μ
ν©λλ€. μ¦, ν΄λΌμ΄μΈνΈλ μλ²μ FINμ λν΄ μ΅μ’
ACKλ₯Ό λ³΄λΈ ν, μΌμ μκ° λμ λκΈ°νλ μνμ
λλ€. μ΄ μνμμ ν΄λΌμ΄μΈνΈλ λ§μ½ μλ²κ° ACKλ₯Ό λ°μ§ λͺ»νκ³ μ¬μ μ‘ μμ²μ νλ€λ©΄, μ΄λ₯Ό μ²λ¦¬ν μ€λΉκ° λμ΄ μμ΅λλ€.
- μλ²λ ν΄λΌμ΄μΈνΈμ ACKλ₯Ό λ°μ ν CLOSED μνλ‘ μ§μ
νλ©°, μ°κ²°μ΄ μμ ν μ’
λ£λ©λλ€. ν΄λΌμ΄μΈνΈλ μΌμ μκ°μ΄ μ§λλ©΄ CLOSED μνλ‘ μ§μ
ν©λλ€. CLOSEDλ μμͺ½ λͺ¨λ μ°κ²°μ΄ μμ ν μ’
λ£λ μνμ
λλ€.
μ λ¨κ³κ° λ€λ₯ΌκΉ?
TCP ν΅μ μμ μ’
λ£μμλ 3 way-handshakeκ° μλ 4-way andshakeλ₯Ό μ¬μ©ν©λλ€. 3 way-handshake λ°©μμμλ SYN-ACK ν¨ν·μ ν΅ν΄ ν΄λΌμ΄μΈνΈμ μλ²κ° λμμ μ°κ²°μ μ€μ νλ €κ³ νκΈ° λλ¬Έμ κ°μνλμ΄ 3λ¨κ³λ‘ μ°κ²°μ΄ μ±λ¦½λ©λλ€.
νμ§λ§ 4 way-handshake λ°©μμμλ FIN ν¨ν·μ΄ λ
립μ μΌλ‘ μ²λ¦¬λκΈ° λλ¬Έμ, μ¦ ν΄λΌμ΄μΈνΈμ μλ²κ° κ°κ° μ°κ²°μ μ’
λ£ν μ€λΉκ° λμ΄ μμμ κ°λ³μ μΌλ‘ νμΈν΄μΌ νκΈ° λλ¬Έμ 4λ¨κ³κ° νμν©λλ€.
μ΄ κΈμμλ TCP 3-way Handshakeμ 4-way Handshakeμ λν΄ μ€λͺ
νμμ΅λλ€. μ΄ κ³Όμ λ€μ TCPκ° λ°μ΄ν° μ μ‘μ μμνκ³ μ’
λ£νλ λ° νμμ μΈ λΆλΆμΌλ‘, μ λ’°μ±κ³Ό μ νμ±μ 보μ₯νκΈ° μν΄ μ€κ³λμμ΅λλ€.
λ€νΈμν¬ νλ‘ν μ½μμ μ΄λ¬ν μ μ°¨λ€μ΄ μ΄λ»κ² μλνλμ§ μ΄ν΄νλ κ²μ λ§€μ° μ€μν©λλ€. μ΄ κΈμ΄ λμμ΄ λκΈΈ λ°λλλ€! π