"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-
'백엔드 > 네트워크' 카테고리의 다른 글
[네트워크기초이론]#31. TCP/IP통신과 MAC주소의 변화 (0) | 2023.10.20 |
---|---|
[네트워크기초이론]#27. TCP 연결, LAN선 뽑기 그리고 게임해킹! (0) | 2023.10.19 |
[네트워크기초이론]#24. Proxy의 활용 네 번째, Reverse Proxy (1) | 2023.10.17 |
[네트워크기초이론]#23. Proxy의 활용 세 번째, 감시와 보호 (0) | 2023.10.17 |
[네트워크기초이론]#22. Proxy의 활용 두 번째, 분석 (0) | 2023.10.17 |