WebSocket

Phase 1: TCP Connection Establishment (TCP 3-Way Handshake)
μ΄ κ³Όμ μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°κΈ° μ , λ Όλ¦¬μ μΈ μ°κ²°μ λ§λλ κ³Όμ μ λλ€.
μ¦, μ λ’°μ± μλ μ μ‘ κ³μΈ΅ μΈμ
μ μμ±νκ³ , μλ¨μ μνμ€ λ²νΈ(ISN)λ₯Ό λκΈ°ννμ¬ ESTABLISHED μνλ‘ μ μ΄ν©λλ€.
[Packet-171]: Client β Server (SYN)
1. ν΄λΌμ΄μΈνΈκ° Active Openμ μνν©λλ€.
ν΄λΌμ΄μΈνΈκ° μλ²μ μ°κ²°μ λ₯λμ μΌλ‘ μμ²νλ κ³Όμ μΌλ‘, connect() μμ€ν
μ½μ νΈμΆνμ¬ SYN ν¨ν·μ μ μ‘ν©λλ€.
2. TCP ν€λμ SYN νλκ·Έλ₯Ό 1λ‘ μ€μ νκ³ , μμ μ μ΄κΈ° μνμ€ λ²νΈ(ISN)λ₯Ό μμ±νμ¬ λ³΄λ
λλ€.
μ΄λ―Έμ§μ 171λ² ν¨ν·μ Infoλ₯Ό 보면 Seq=0μΌλ‘ μ€μ λμ΄ μμ΅λλ€.
μ΄κ²μ μμ΄μ΄μ€ν¬κ° 보기 νΈνλΌκ³ βκ°μ§λ‘ 보μ¬μ£Όλ μ«μ(Relative Sequence Number)βμ
λλ€.
μ€μ λ‘λ 0μ΄ μλλΌ 40μ΅ κ°μ μ«μ μ€ λ¬΄μμλ‘ μμ±λ κ±°λν μ«μμ λλ€.
ν¨ν· ν¨λμ Transmission Control Protocolλ₯Ό νμ₯νλ©΄ νμΈν μ μμ΅λλ€.

μ΄ μμ Sequence Number: 0 (relative sequence number)λΌκ³ μ ν μ€μ΄ 보μ΄κ³ ,
κ·Έ λ°λ‘ λ°μ Sequence Number (raw): 2669254254 λΌκ³ μ ν raw κ°μ΄ λ°λ‘ ν΄λΌμ΄μΈνΈ OSκ° μμ±ν μ§μ§ ISNμ
λλ€.
π€ κ·ΈλΌ μ 0μΌλ‘ 보μ¬μ£Όλμ?
2669254254λ€μμ2669254255κ° μλμ§ νμΈνλ κ²λ³΄λ€, 0 λ€μμ 1μ΄ μλμ§ νμΈνλ κ² λΆμκ° μ μ₯μμ νΈνκΈ° λλ¬Έμ μμ΄μ΄μ€ν¬κ° μλμΌλ‘ κ³μ°ν΄μ 보μ¬μ€λλ€.
3. μν μ μ΄: ν΄λΌμ΄μΈνΈλ CLOSED β SYN_SENT μνλ‘ μ μ΄ν©λλ€.
SYN_SENT μνλ‘ μ μ΄ν©λλ€.μν μ μ΄ λΆλΆμ μμ΄μ΄μ€ν¬ νλ©΄μμ μ°Ύμλ³Ό μ μμμ΅λλ€. νμ§λ§ μ μ μ΄λλμ§ μ μ μμ΅λλ€.
ν¨ν·(Packet)μ λ€νΈμν¬ μ μ νκ³ λ μκ°λ μ 보μ λλ€.
μν(State)λ μ 보 μμ μλ μΈλΆ μ 보μ λλ€. ν¨ν· ν€λμλ ν¨ν·μ μ μ‘νλ μκ°, λμμ λ΅μ₯μ κΈ°λ€λ¦¬λ λͺ¨λ(SYN_SENT)λ‘ λ³ν©λλ€.
π€ SYN_SENT μνλ μ΄λ»κ² νμΈν μ μλμ?
μμ΄μ΄μ€ν¬μμλ μ§μ νμΈν μ μκΈ° λλ¬Έμ ν¨ν· λ΄λΆμ νλκ·Έλ₯Ό ν΅ν΄ μμΆλ‘ ν μ μμ΅λλ€.
Flagsμ νλͺ©μ νμ₯νλ©΄,
Syn: Set(1)μΈ κ²μ νμΈν μ μμ΅λλ€.
TCP/IP State Transition Diagram (RFC 793) SYN-SENT: represents waiting for a matching connection request after having sent a connection request.
TCP κ·μ½(RFC 793)μ λ°λ₯΄λ©΄, SYNμ λ³΄λΈ μ§ν OSλ 무쑰건 SYN_SENT μνλ‘ λ°λλ€κ³ λͺ μλμ΄ μμ΅λλ€. κ·Έλμ ν΄λΌμ΄μΈνΈλ SYN_SENT μνλΌκ³ κ²°λ‘ μ λ΄λ¦΄ μ μμ΅λλ€.
[Packet-172]: Server β Client (SYN, ACK)
1. μλ²κ° Passive Open μνμμ μμ²μ μλ½ν©λλ€.
μλ²λ μ ν리μΌμ΄μ
μ΄ μ€νλλ©΄μ μ΄λ―Έ bind()μ listen() μμ€ν
μ½μ νΈμΆνμ¬ μλμ κ°λ°©(Passive Open) μνλ‘ μ§μ
νμ¬ LISTEN μνμ
λλ€.
μλ²λ ν΄λΌμ΄μΈνΈμ μ°κ²° μμ²(SYN)μ κΈ°λ€λ¦¬λ©΄μ, SYNμ μμ νλ©΄ μ΄μ λν μλ΅ νλ‘μΈμ€λ₯Ό μμν©λλ€.
2. TCP ν€λ μ€μ

SYN: μλ²λ μμ μ ISNμ μμ±νμ¬ λκΈ°ν μμ²μ 보λ λλ€.
ACK: ν΄λΌμ΄μΈνΈμ ISNμ 1μ λν κ°(ACK=1)μ μΉμΈ λ²νΈλ‘ 보λ λλ€.
Acknowledgment number (raw): 2669254255λ‘ λνλμμ΅λλ€.
π€ κ·Έλ λ€λ©΄ μ 1μ λν κΉμ?
TCP Segmentμ Len=0μΈ κ²μ 보면, μ΄ ν¨ν·μλ λ°μ΄ν°(Payload)κ° μλ€λ κ²μ μ μ μμ΅λλ€.
μΌλ°μ μΌλ‘ λ°μ΄ν°κ° μμΌλ©΄ ACK λ²νΈλ μ¦κ°νμ§ μμμΌ ν©λλ€. νμ§λ§ TCP κ·μ½(RFC 793)μλ νΉμν κ·μΉμ΄ μμ΅λλ€.
βThe segment length (SEG.LEN) includes both data and sequence space occupying controls. When a SYN is present then SEG.SEQ is the sequence number of the SYN.β
μ΄λ, λ€μκ³Ό κ°μ΄ ν΄μν μ μμ΅λλ€.
"SYN νλκ·Έμ FIN νλκ·Έλ λ°μ΄ν°κ° μλλΌλ λ Όλ¦¬μ μΌλ‘ 1λ°μ΄νΈμ μνμ€ λ²νΈλ₯Ό μλΉ(Consume)νλ€.β
μ¦, μλ² μ μ₯μμ 172λ² ν¨ν·(SYN + ACK)μ λ³΄λΌ λ λ Όλ¦¬λ λ€μκ³Ό κ°μ΅λλ€.
ν΄λΌμ΄μΈνΈκ° λ³΄λΈ 171λ² ν¨ν·μ λ°μ΅λλ€.
λ°μ΄ν°(Payload)λ μμ§λ§, SYN νλκ·Έκ° μ‘΄μ¬ν©λλ€.
SYN νλκ·Έλ₯Ό λ°μ΄ν° 1byte μ²λΌ μ·¨κΈν΄μ μ²λ¦¬ν©λλ€.
κ·Έλμ μλ²λ λ°μ λ²νΈ(2669254254) + 1μΈ 2669254255λ₯Ό λ€μ λ²νΈλ‘ κΈ°λνκ³ μλ΅(ACK)ν©λλ€.
μ΄λ¬ν μ€κ³μ μ₯μ μ λ€μκ³Ό κ°μ΅λλ€.
μΌκ΄λ μ€νΈλ¦Ό λͺ¨λΈ
μ°κ²° μ€μ /μ’ λ£κ° λͺ¨λ νλμ μ°μλ μνμ€ λ²νΈ κ³΅κ° μμ λμ λλ€.
μ‘μμ μμͺ½μ΄ βμ΄λκΉμ§ μ²λ¦¬νλμ§βλ₯Ό νλμ μ«μ(ACK)λ‘λ§ ννν μ μμ΅λλ€.
μ¬μ μ‘/μ€λ³΅ μ²λ¦¬ λ¨μν
SYN/FINλ μνμ€ λ²νΈλ₯Ό κ°κΈ° λλ¬Έμ, βμ΄ μνμ€ κ΅¬κ°μ μ΄λ―Έ λ°μ 건κ°?βλ§ νμΈνλ©΄ μ€λ³΅/μ§μ°/μ¬μ°μ‘ μ¬λΆλ₯Ό νλ¨ν μ μμ΅λλ€.
μ μ΄ νλκ·ΈλΌκ³ ν΄μ λ³λ μμΈ μ²λ¦¬ λ‘μ§μ λμ§ μμλ λ©λλ€.
3. μν μ μ΄: μλ²λ LISTEN β SYN_RCVD μνλ‘ μ μ΄ν©λλ€.
SYN_RCVD μνλ‘ μ μ΄ν©λλ€.ν΄λΌμ΄μΈνΈμ SYN ν¨ν·μ λ°μΌλ©΄, μλ²λ μ΄μ λν μλ΅μΌλ‘ SYN-ACKλ₯Ό λ³΄λ΄ μ°κ²° μμ²μ νμΈ(ACK)νκ³ μ°κ²° μ립 κ³Όμ μ μ§μ ν©λλ€.
SYN-ACKλ₯Ό 보λμΌλ―λ‘, μ΄μ ν΄λΌμ΄μΈνΈμ λ§μ§λ§ μλ΅μ κΈ°λ€λ¦¬κΈ° μν΄ μλ²μ OS μμΌ μνλ₯Ό SYN_RCVDλ‘ λ³κ²½ν©λλ€.
[Packet-173]: Client β Server(SYN, ACK)
1. ν΄λΌμ΄μΈνΈκ° μλ²μ λκΈ°ν μμ²μ νμΈν©λλ€.
μλ²μ ISNμ 1μ λν κ°(ACK=1)μ 보λ λλ€.
2. μν μ μ΄
ν΄λΌμ΄μΈνΈλ μ΄ ν¨ν·μ μ μ‘νλ©° SYN_SENT β
ESTABLISHEDμνκ° λ©λλ€.μλ²λ μ΄ ν¨ν·μ μμ νλ©° SYN_RECEIVED β
ESTABLISHEDμνκ° λ©λλ€.μ΄λ ν΄λΌμ΄μΈνΈμ μλ² κ° λ Όλ¦¬μ μΈ λ°μ΄ν° μ μ‘ κ²½λ‘κ° μμ±λ¨μ μλ―Έν©λλ€.
Phase 2. Protocol Upgrade Handshake (HTTP β WebSocket)
μ΄ κ³Όμ μ Application Layer(L7) νλ‘ν μ½μ HTTP/1.1μμ WebSocketμΌλ‘ μ νν©λλ€.
[Packet-174]: Client β Server (HTTP GET /ws)

ν΄λΌμ΄μΈνΈκ° WebSocket Handshakeλ₯Ό μν Requestλ₯Ό μ μ‘ν©λλ€.
Hypertext Transfer Protocol μΉμ
μ TCP νμ΄λ‘λλ₯Ό ν΄μν κ²°κ³Όμ
λλ€.
Upgrade: websocketβ νλ‘ν μ½ λ³κ²½ μμ²Connection: Upgradeβ ν(Hop)κ° μ κ·Έλ μ΄λ μ΅μ λͺ μ (νμ ν€λ)Sec-Websocket-Key: tgK1hM8wU7SHuWxUJds40Q==β 무μμ 16bytes κ°μ Base64 μΈμ½λ©ν μ±λ¦°μ§ ν€
[Packet-175]: Server β Client (ACK)
μλ² TCP κ³μΈ΅μ μμ νμΈμ λλ€.
L7 μ ν리μΌμ΄μ μ΄ ν¨ν· 174λ² μμ²μ μ²λ¦¬νμ¬ μλ΅(101 Switching Protocols)μ μμ±νλ λμ, L4(OS 컀λ)λ μμ λ²νΌμ λ°μ΄ν°κ° μ μ¬λλ μ¦μ λ 립μ μΌλ‘ TCP ACK(Packet-175)λ₯Ό μ‘μ μΈ‘μ 보λ λλ€.
μ΄λ TCPμ μ λ’°μ± λ³΄μ₯ λ©μ»€λμ¦μ΄λ©°, βλ°μ΄ν°κ° μ μ€ μμ΄ λμ°©νμβμ μ‘μ μΈ‘μ μ리λ μ μ°¨μ λλ€.
[Packet-193]: Server β Client (HTTP 101 Switching Protocols)

μλ²κ° Handshake Responseλ₯Ό μ μ‘νλ©° νλ‘ν μ½ μ νμ μΉμΈν©λλ€.
HTTP/1.1 Status Code: 101: νλ‘ν μ½ μ ν μΉμΈ μλ΅ μν μ½λSec-WebSocket-Accept: fVka1UgF5mcoCU07ZlpLj/mPUR0=: ν΄λΌμ΄μΈνΈκ° λ³΄λΈ Keyμ Magic GUIDλ₯Ό κ²°ν© ν SHA-1 ν΄μ±νκ³ , μ΄λ₯Ό λ€μ Base64 μΈμ½λ©νμ¬ μμ±ν μλ΅ ν€μ λλ€.μ΄ κ³Όμ μ ν΅ν΄ μνΈ μ°κ²°μ κ²μ¦ν©λλ€.
[Packet-194]: Client β Server (ACK)
ν΄λΌμ΄μΈνΈ μΈ‘ OSκ° μλ²μ 193λ² ν¨ν·(Handshake Response) μμ μ νμΈν©λλ€.
μ΄ μμ μ΄ν ν΄λΉ TCP μΈμ
μ Payloadλ λ μ΄μ HTTP κ·μΉμ΄ μλ WebSocket Frame κ·κ²©μ λ°λ₯΄λ©°, μλ°©ν₯ ν΅μ (Full-Duplex)μ΄ μμλ©λλ€.
Phase 3. Data Transmission (WebSocket Frames)
ν΄λΌμ΄μΈνΈμ μλ²λ HTTP 101 Switching Protocols μλ΅ μ΄ν,
TCP μ°κ²° μμμ WebSocket νλ‘ν μ½μ μ¬μ©νμ¬ νλ μ λ¨μμ Full-Duplex ν΅μ μ μνν©λλ€.
μ΄ λ¨κ³μμλ HTTP λ©μμ§κ° μλ, RFC 6455μ μ μλ WebSocket Frame νμμ΄ TCP Payloadμ λ΄κΉλλ€.
[Packet-199]: Server β Client (WebSocket Text [FIN])

μλ²κ° ν΄λΌμ΄μΈνΈμκ² ν μ€νΈ λ©μμ§(λ°μ΄ν°)λ₯Ό PUSH ν©λλ€.
Wiresharkμ WebSocket νΈλ¦¬κ° νμλλ κ²μ, μ΄ ν¨ν·μ΄ TCP Payloadλ₯Ό HTTPκ° μλλΌ WebSocket νλ‘ν μ½λ‘ ν΄μνλ€λ μλ―Έμ λλ€.
νλ μ ꡬ쑰λ λ€μκ³Ό κ°μ΅λλ€.
FIN: TrueOpcode: Text (1)β 1μ ν μ€νΈ νλ μ μ’ λ₯μ΄λ©° Payloadκ° UTF-8 Textλ₯Ό μλ―Έν©λλ€.Mask: Falseβ μλ² to ν΄λΌμ΄μΈνΈλ λ³΄ν΅ Falseμ λλ€.Payload length: 81β μ€μ λ°μ΄ν° κΈΈμ΄λ₯Ό μλ―Έν©λλ€.
Payload λ΄μ©
Line-based text dataλ μ΄λ―Έ WebSocket νλ μ μμ μλ νμ΄λ‘λλ₯Ό, Wiresharkκ° μ¬λμ΄ μ½κΈ° μ’κ² νμ΄μ 보μ¬μ£Όλ μμμ
λλ€. μ΄λ―Έμ§μ 보μ¬μ§λ JSON λ©μμ§λ Payloadλ₯Ό UTF-8 ν
μ€νΈλ‘ λμ½λ©ν κ²°κ³Όμ
λλ€.
WebSocket Opcode μ’ λ₯ (RFC 6455)
λ©μμ§ λ°μ΄ν° νλ μ (Data Frames): ν μ€νΈ/λ°μ΄λ리 λ©μμ§λ₯Ό μ μ‘νλ νλ μ
0x0
Continuation Frame
μ΄μ νλ μμ μ°μ λ°μ΄ν°
0x1
Text Frame
UTF-8 ν μ€νΈ λ°μ΄ν°
0x2
Binary Frame
λ°μ΄λ리 λ°μ΄ν°
μ μ΄ νλ μ (Control Frames): μ°κ²° κ΄λ¦¬Β·μν μ μ΄λ₯Ό μν νλ μ
0x8
Connection Close
μ°κ²° μ’ λ£ μμ²
0x9
Ping
μν νμΈ(Ping) μμ²
0xA
Pong
Pingμ λν μλ΅
[Packet-199]: Server β Client (WebSocket Text [FIN])
TCP κ³μΈ΅μ μμ νμΈ κ³Όμ μ λλ€.
WebSocketμ TCP μμμ λμνλ―λ‘, μλ²κ° λ³΄λΈ [Packet-199]μ TCP μΈκ·Έλ¨ΌνΈμ λν΄ ν΄λΌμ΄μΈνΈλ TCP ACK ν¨ν·μ λ³΄λ΄ μμ μ νμΈν©λλ€.
TCP Streamκ³Ό WebSocket Frame κ΄κ³
WebSocket ν΅μ μ μ°κ²° μλͺ λμ νλμ TCP μ°κ²°(TCP Stream) μμμ μνλ©λλ€.
TCP κ³μΈ΅μμ WebSocket λ°μ΄ν°λ μ°μλ λ°μ΄νΈ μ€νΈλ¦Όμ μΌλΆ(Payload) λ‘ μ λ¬λλ©°, TCPλ WebSocket νλ μμ κ²½κ³λ₯Ό μΈμ§νμ§ μμ΅λλ€.
λ°λΌμ, WebSocket νλ μμ λ©μμ§ κ²½κ³λ μ ν리μΌμ΄μ κ³μΈ΅(WebSocket νλ‘ν μ½) μμλ§ μλ―Έλ₯Ό κ°μ§λ©°, μ λ’°μ±, μμ 보μ₯, μ¬μ μ‘μ TCP κ³μΈ΅μμ λ΄λΉν©λλ€.
Phase 4. WebSocket Closing Handshake (Graceful Shutdown)
WebSocketμ Application Layerμμ μμΈ‘μ΄ μ’ λ£ μμ¬λ₯Ό λͺ μμ μΌλ‘ κ΅ννμ¬, λΉμ μ μ’ λ£μ μ μ μ’ λ£λ₯Ό ꡬλΆν©λλ€.
μ μ μ’ λ£:
Close Frameμ μ£Όκ³ λ°λ Closing Handshake μ μ°¨λ₯Ό μλ£ν ν TCP μ°κ²°μ λλ κ².λΉμ μ μ’ λ£: μ΄ μ μ°¨ μμ΄ κ°μκΈ° TCP μ°κ²°μ΄ λκΈ°λ κ²½μ°.
[Packet-322]: Server β Client (WebSocket Connection Close [FIN])

μλ²κ° λ¨Όμ
Close Frameμ μ μ‘νλ©° Websocket μ°κ²° ν΄μ μ μ°¨λ₯Ό κ°μν©λλ€.
WebSocket μ°κ²°μ λμ λλ μ’ λ£ μμ²Β·μλ΅μ λͺ¨λ HTTPκ° μλ WebSocket νλ μμΌλ‘ μ£Όκ³ λ°κ³ , μ΄ νλ μμ΄ μ€λ¦° TCP μΈκ·Έλ¨ΌνΈλ νν PSH, ACK νλκ·Έλ₯Ό κ°μ§ μΌλ° λ°μ΄ν° μΈκ·Έλ¨ΌνΈμ²λΌ μ μ‘λ©λλ€.
λκ° λ¨Όμ Close Frameμ 보λ΄λμ§ μ ν΄μ§ κ·μΉμ μκ³ , νμ¬ κΈμμλ μλ²κ° λ¨Όμ Close νλ μμ μ μ‘ν©λλ€.
μ’ λ£ μμ²μ 주체λ ν΄λΌμ΄μΈνΈκ° λ μλ μμΌλ, νμ¬ ν¨ν· νλ¦μμλ μλ²κ° 주체μ λλ€.
FIN bit=1: νλ μ μ’ λ£λ₯Ό μλ―Ένλ©°, TCP FINκ³Όλ λ€λ₯Έ κ°λ
νλ μ ꡬ쑰:
Opcode=0x8: μ°κ²° μ’ λ£ μμ²Payload: μν μ½λ(Status Code, μ: 1000 Normal Closure) ν¬ν¨.
μν: WebSocket κ³μΈ΅μ OPEN β
CLOSINGμνλ‘ μ§μ ν©λλ€.
OPEN μνμμ νμͺ½μ΄ Close Frameμ 보λ΄λ©΄ κ·Έ μκ°λΆν° ν΄λΉ WebSocket ꡬνμ CLOSINGμΌλ‘ λ€μ΄κ°κ³ , μλ΅ CLOSEλ₯Ό μ£Όκ³ λ°μ λ€ CLOSEDλ‘ μ΄λν©λλ€.
μ¦, μ΄ μμ μμ μλ² WebSocket μνλ OPEN β CLOSINGμΌλ‘ μ μ΄λκ³ , ν΄λΌμ΄μΈνΈμ μλ΅μ κΈ°λ€λ¦½λλ€.
[Packet-322]: Client β Server (ACK)
ν΄λΌμ΄μΈνΈ OSκ° TCP κ³μΈ΅μμ Close Frame λ°μ΄ν°κ° μ μ€ μμ΄ λμ°©νμμ νμΈνκ³ ACK ν¨ν·μ μ μ‘ν©λλ€. μ΄λ Application Layerμ μλ΅μ΄ μλλΌ, L4 μμ€μ μμ νμΈ λ©μ»€λμ¦μ λλ€.
ACKλ TCP λ 벨μ μ λ’°μ± λ³΄μ₯ κ³Όμ
[Packet-324]: Client β Server (WebSocket Connection Close [FIN])
λΌμ΄μΈνΈκ° μ’
λ£ μμ²μ μΉμΈνκ³ , μ΄μ λν μλ΅μΌλ‘ μμ μ μ’
λ£ νλ μ(Close Frame)μ μ μ‘ν©λλ€. μ΄λ μλ² Close μμ²μ λν μλ΅μ΄λ©° Close EchoλΌκ³ λ ννλ©λλ€.
μ΄ Close Frameμ μ‘μ ν ν΄λΌμ΄μΈνΈμ WebSocket μν μμ OPNE β CLOSINGμΌλ‘ μ μ΄λ©λλ€.
νλ μ ꡬ쑰:
Mask=1: ν΄λΌμ΄μΈνΈ β μλ² μ μ‘μ΄λ―λ‘ λ§μ€νΉ μ μ©Opcode=0x8: μ°κ²° μ’ λ£ μμ²FIN bit=1: WebSocket Frame μ’ λ£
[Packet-325]: Server β Client (ACK)
μλ² TCP κ³μΈ΅μμ ν΄λΌμ΄μΈνΈμ Close Frameμ΄ μ±κ³΅μ μΌλ‘ λμ°©νμμ νμΈνλ©°, μμ μ νμΈνκ³ ACKλ₯Ό μ μ‘ν©λλ€.
μ΄ μμ μμ L7 λ 벨(WebSocket)μ λ Όλ¦¬μ μ°κ²°μ μμ νκ² μ’ λ£λμκ³ , μ΄ν TCP FIN κ΅νμ ν΅ν΄ Socketκ³Ό κ°μ 물리μ 리μμ€κ° ν΄μ λ©λλ€.
Phase 5. TCP Connection Termination (Teardown)
TCP μ°κ²° μ’ λ£λ FIN κΈ°λ°μ μ’ λ£ μ μ°¨λ₯Ό ν΅ν΄ μμΌ(Socket) 리μμ€ λ° ν¬νΈ λ°μΈλ©μ OSμ λ°νν©λλ€.
μΌλ°μ μΌλ‘λ 4-Way Handshakeλ₯Ό μννμ§λ§, μν©μ λ°λΌ FIN + ACKκ° ν©μ³μ Έ 3-Wayμ²λΌ 보μ΄λ μ΅μ νκ° λ°μν μ μμ΅λλ€.
μ΄ μμμμλ μΌλ°μ μΈ 4βWay μ’ λ£κ°, FINκ³Ό ACKλ₯Ό λ¬Άμ΄μ 보λ΄λ ννλ‘ 3βWayμ²λΌ μ΅μ νλ μΌμ΄μ€μ λλ€.
Full-Duplex(μ μ΄μ€) μ°κ²°μ ν΄μ νλ κ³Όμ μ λλ€.
Server Output Close: 326λ² ν¨ν·μΌλ‘ μλ²μ μ‘μ μ±λμ΄ λ«νμ΅λλ€.
Client Output Close: 327λ² ν¨ν·μΌλ‘ ν΄λΌμ΄μΈνΈμ μ‘μ μ±λμ΄ λ«νμ΅λλ€.
Complete Teardown: 328λ² ν¨ν·μΌλ‘ μμͺ½μ μνκ° λκΈ°νλλ©° μΈμ μ΄ μμ ν μ’ λ£λμμ΅λλ€.
[Packet-326]: Server β Client (FIN, ACK)
μλ²κ° Active Closeλ₯Ό μλνλ©° λ¨Όμ FINμ μ μ‘ν©λλ€.
νλκ·Έ:
FIN=1:λ μ΄μ λ³΄λΌ λ°μ΄ν°κ° μμμ μλ―Έν©λλ€.ACK=1: μ΄μ κΉμ§ μμ ν λ°μ΄ν°λ₯Ό μ μμ μΌλ‘ νμΈνμμ μλ―Έν©λλ€.
μν μ μ΄ μλ²λ ESTABLISHED β
FIN_WAIT_1μνλ‘ μ§μ ν©λλ€.
μ΄ μμ μμ μλ²λ ν΄λΌμ΄μΈνΈμ ACKλ₯Ό κΈ°λ€λ¦¬κ³ μμΌλ©°, μ΄ν ν΄λΌμ΄μΈνΈμ FINμ λ³λλ‘ μμ ν΄μΌ ν©λλ€.
[Packet-327]: Client β Server (FIN, ACK)
ν΄λΌμ΄μΈνΈκ° Passive Closeλ₯Ό μνν©λλ€. μλ²μ FINμ λν ACKμ μμ μ FINμ ν©μ³μ μ μ‘ν©λλ€.
μλ²μ FINμ λν ACKμ μμ μ΄ λ³΄λΌ FINμ νλμ μΈκ·Έλ¨ΌνΈμ ν©μΉ μ΅μ νλ ν¨ν΄μ
λλ€.
μ΄ λμμΌλ‘ μΈν΄ 4-Wayκ° 3-Wayμ²λΌ 보μ΄λ ννκ° λ©λλ€.
νλκ·Έ:
FIN=1: ν΄λΌμ΄μΈνΈλ λ μ΄μ λ³΄λΌ λ°μ΄ν°κ° μμACK=1: μλ² FINμ λν νμΈ
μν μ μ΄:
π‘ μΌλ°μ μΌλ‘
CLOSE_WAITμμλ μ ν리μΌμ΄μ μ΄ λ§μ§λ§μΌλ‘ writeλ₯Ό μνν μ μλ κΈ°νλ₯Ό μ£Όμ§λ§, μ¬κΈ°μλ λ¨μ λ°μ΄ν°κ° μκΈ° λλ¬Έμ λ°λ‘ FIN
ν΄λΌμ΄μΈνΈλ ESTABLISHED β
CLOSE_WAITλ₯Ό κ±°μ³ μ¦μLAST_ACKμνκ° λ©λλ€.μ¦μ FINμ 보λ΄λ―λ‘
CLOSE_WAITλ₯Ό κ±°μΉμ§ μκ³ LAST_ACK μνλ‘ μ§μ ν©λλ€.
μλ²λ μ΄ ν¨ν·(ACK)μ λ°κ³
FIN_WAIT_2λ‘ κ°λ€κ°, λμμ λ€μ΄μ¨ FINμ μ²λ¦¬νλ©°TIME_WAITμνλ‘ μ§μ ν©λλ€.ν΄λΌμ΄μΈνΈ ACK μμ β
FIN_WAIT_2ν΄λΌμ΄μΈνΈ FIN μμ β
TIME_WAITλμμ λ μ΄λ²€νΈλ₯Ό μ²λ¦¬νκΈ° λλ¬Έμ μ€κ° μνκ° μμκ°μ λ³κ²½λ©λλ€.
TCP μ€ν ꡬνμ λ°λΌ μ€κ° μνλ₯Ό μ΄λ»κ² μ λ°μ΄νΈνλμ§ λ‘κ·Έ μμμλ μ 보μ΄μ§ μμ μ μμ§λ§,
λ Όλ¦¬ νλ¦μ FIN_WAIT_1 β (ACK) β FIN_WAIT_2 β (FIN) β TIME_WAIT μ λλ€.
[Packet-328]: Server β Client (ACK)
μλ²κ° ν΄λΌμ΄μΈνΈ FINμ λν μ΅μ’ νμΈ(ACK)λ₯Ό μ μ‘νλ©° μ’ λ£ μ μ°¨λ₯Ό λ§λ¬΄λ¦¬ν©λλ€.
μν μ μ΄:
ν΄λΌμ΄μΈνΈλ LAST_ACK β
CLOSEDμνκ° λμ΄ μ¦μ μμΌ λ¦¬μμ€λ₯Ό λ°νν©λλ€.μλ²λ
TIME_WAITμνλ₯Ό μ μ§(μ§μ° ν¨ν· μ²λ¦¬ 보μ₯)ν ν CLOSED λ©λλ€.μ§μ°λ μΈκ·Έλ¨ΌνΈ μκ±°
μ΄μ μ°κ²°μ μΈκ·Έλ¨ΌνΈκ° μλ‘μ΄ μ°κ²°λ‘ νΌμ λμ§ μλλ‘ λ³΄μ₯
Last updated