백엔드/네트워크

[네트워크기초이론]#26. TCP 연결이라는 착각에 대해

묘걍 2023. 10. 18. 16:13

"TCP는 연결 지향이다, Connection Oriented다"

'연결'은 모호하다

 

TCP헤더

출처: 강사님 화면

Port 번호

- 출발지와 목적지가 쌍으로 나온다

- 16bit

- 경우의 수는 2¹⁶

     - 0 ~ 65535

     - 0번, 65535번은 사용하지 않음

     - 1 ~ 655354 (사실 1번도 사용하진 않음)

 

Sequence Number

-  중요!!!!

- 직소퍼즐 하나에 붙인 번호

- 32bit

- 경우의 수는 2³²

- 용량으로 환산하면 4GB

     - 32bit로 표현할 수 있는 최대 메모리 크기

- Ack번호와 Seq번호가 합쳐서 작동

 

Flags

- 각각의 의미가 있음

- 표시한 두 가지를 가지 먼저 알아보기

 

'연결'이란 무엇인가?

'연결이 되었다'는 근거가 무엇인가?

- 길동이가 영희에게 전화

- 영희가 받아서 응답

- 응답이 오면 이대부터 통화가 시작되는 것, 연결이 됐다고 가정

= 영희랑 통화중인 것, 영희와 전화 연결이 되었다

 

그런데 만약 전화를 영희와 목소리가 똑같은 순희가 받았다면?

- 길동이는 영희와 연결되지 못했다. 하지만 인지하지 못했다

- 길동이는 순희와 연결되었다

보안적인 측면에서 TCP연결은 보안성이 없다

- 기밀성: 암호화 안 되어 있음

- 무결성: 순희가 페이크친건데 그걸 길동이가 알 수 있는 메커니즘이 없다

 

연결이 됐다는 것은 착각이다

 

연결을 위해 TCP에서 주로 하는 방법론

3 - Way Handshake

이미지 출처: 강사님 화면

- (번역하면 3방향 악수하기...?)

- 왔다 갔다 하는 것의 단위는 Segment

- 어떤 Segment가 날라가는데 거기에 Flag가 SYN이 세트가 됨(1)

     - 이전까지 Server는 Listen, 외부에서 누군가 나에게 연결을 하려고 하나 기다리고 있음

- 연결하자고 SYN Flag가 세트된 걸 받으면 잘 받았다고 받은 SYN값 +1

     - 이것과 함께 내 시퀀스 번호를 보내줌

- Flag는 조합이 가능

     - SYN & ACK 쌍인데 중간에 SYN + ACK을 한 번에 보내서 3번

- 받은 Client도 "너 4000번이구나. 확인했어"하고 4000+1을 보내줌

3-Way HandShake는 기본적으로

- 시퀀스 번호와 MSS를 교환

     - 필요한 경우 상대의 MSS에 맞춰 하향 평준화

- 혼잡 제어 정책을 교환

     - 네트워크가 너무 시끄럽거나 장애가 발생하여 무언가를 보냈는데도 수신이 안 되는 경우

     - 제로 윈도우... 상대의 데이터를 못 받는 경우

     → 혼잡상황

     - 요즘 SACK을 사용 (나 SACK 사용하는데 너도 지원해?)

 

 

정리

- 연결 = 3-way handshake

- 3-way handshake는 Seq번호와 MSS 그리고 정책을 교환하는 것이다

- 보안성이 없다

- 보안 사고 발생

- 거꾸로 보안을 하기도 함

 

 

 

 

출처: https://youtu.be/DC9FfKSgisg?si=GP_8tYW3oErWtbZ-