본문 바로가기
Network

공부하자 네트워크

by Coarti 2023. 11. 7.

TCP와 UDP

  • TCP에만 연결(Connection, Session, Virtual Circuit)개념이 있다.
  • 연결은 결과적으로 순서번호로 구현된다.
  • 연결은 '상태(전이)' 개념을 동반한다.
  • TCP는 배려남, UDP는 (배려가 없는) 나쁜 남자에 비유할 수 있다.

순서번호는 각 데이터용량 + 1이다.

User(System S/W) Process(Client) 소켓생성
File(Socket) 소켓오픈, TCP Port 부여
Kernel(Application S/W) TCP 예) TCP : 3000
IP  192.168.0.10
Driver 랜선, L2Switch, Router,Internet,
H/W(Physical) NIC
 
H/W(Physical)    Router, L2Switch, 랜선
NIC
Kernel(Application S/W) Driver
IP  예) TCP : 80
TCP  192.168.0.20
User(System S/W) File(Socket)  연결대기(LISTEN)
Process(Server) 소켓 생성, 개방

서버가 열려있지 않다면 OS에서 처리해준다

 

소켓 통신을 위한 준비

  1. 서버의 소켓을 열어 연결대기 상태로 만든다
  2. 클라이언트는 서버의 IP와 Port를 알아야 한다
  3. 클라이언트도 통신을 위한 소켓을 연다

TCP 연결 과정(3-way handshaking)

SYN : Synchronization

ACK : Acknowlegment

SYN_SENT : Synchronization Segment, Request Segment 전송

SYN_RCVD : Synchronization Recive, SYN 요청을 받은 상태

Established : 연결 상태

 

대전제 : 서버(192.168.0.20:80)가 열려있고 클라이언트가 연결을 시도

 

Round Trip Time(RTT) 50ms로 가정하자

통신단위는 Segment지만 형태가 다르다

IP Header + Payload가 아닌 IP Header + TCP Header의 형태이다

단순 내부 연결 관리 목적의 세그먼트가 이동한다

 

클라이언트는 랜덤으로 시퀀스 넘버를 생성(예 : 1000번)

서버에 SYN(1000) 연결요청

서버도 시퀀스 넘버를 생성 (예 : 1000번)

클라이언트에 응답으로 SYN(4000) + ACK(1001) 전달

(이때 클라이언트는 연결됬다고 판단, 서버는 아직 ACK를 못받아 연결을 하지 않은 상태)

클라이언트는 응답으로ACK(4001) 전달

 

요약

시퀀스 번호 + 정책(MSS)를 교환

그런데 클라이언트 MMS가 1460bytes이고 서버 MMS가 1400bytes 이면 하향평준화하여 통신

 

연결이라는 건 관리적 정보, 프로토콜이 규정하는 정보를 교환하는 것

TCP 통신은 논리적 연결이다.


TCP 연결 종료 과정(4-way handshaking)

대전제 : 클라이언트가 연결 종료를 시도(일반적인 상황을 전제로 한다.)

CLOSE_WAIT : 서버의 입장

TIME_WAIT : 서버 연결을 끊자고 요청이 온 상태, 클라이언트 입장

CLOSED : 소켓을 회수(자원 회수)

TCP (연결) 상태 변화


TCP Header 형식

UDP Header 형식

영상송출, 게임서버

멀티미디어 데이터 전송에 최적화된 측면이 있다


파일 다운로드 중 LAN 케이블을 분리했다가 다시 연결하면 TCP 연결은 어떻게 될까?

TCP 연결은 유지된다. 단 얼마나 오래 분리해놓았느냐에 따라 다른다.

소켓 프로그래밍은 수시로 연결이 되어있는지 확인한다. 하트비트를 보낸다고 표현한다.

 

TCP 연결이라는 착각

  • 재전송 타이머의 기본 근사값은 대략 3초다. 하지만 대부분의 운영체제들은 1초 미만이다.
  • 재전송 타이머 만료 후에도 확인 응답을 받지 못한 경우 세그먼트를 재전송하고 RTO(Retransmission Time-OUT) 값은 두배로 증가한다. 1초 -> 2초 -> 4초 -> 8초 -> 16초 간격으로 재전송
  • 보통 최대 5회 재전송을 시도하고 5회 이상 모두 실패할 경우 보통 전송 오류가 발생

TCP 연결과 게임 버그

  • 어떤 MMORPG 게임에서 아이템 복제버그가 발생하였다.
  • 이는 논리적 TCP 연결과 물리적 링크간 차이를 이용한 시간차 공격이라 볼 수 있으며 연결이 사실은 End-point의 주관적 판단에 불과하다는 것을 보여준다.
  • 보안성이 전혀 없는 판단이다.
  • 보안성의 3대요소 
    1. 기밀 : 누가 도청할 수 있는가
    2. 무결 : 딴 놈이 흉내 낸 거, 나는 '아'라고 했는데 '어'라고 들리게 조작, 변조했다. 그러할 가능성이 없다는 것
    3. 가용 : 항상 될 수 있게 해주는 것. 이건 재해대잭에 관련됨

DNS

 

이름으로 IPv4 주소를 검색해 결과를 알려주는 서비스를 제공

  • 분산 구조형 DB
    • DB 시스템(DNS 네임 서버)의 분산 구성
    • 데이터의 영역별 구분(Domain Zone) 및 분산관리
    • 도메인의 네임서머 및 도메인 데이터는 해당 관리주체에 의해 독립적으로 관리됨
  • Tree 구조의 도메인 네임(Domain Name) 체계
    • Domain : 영역, 영토를 의미
    • 도메인 네임의 자융적 생성
    • 생성된 도메인 네임은 언제나 유일(Unique)하도록 네임 체계 구성
Host Domain Name
www naver.com

 

PC -> DNS -> PC -> Server

PC (DNS cache 확인) -> Server 

 

처음에 IP주소+유효시간을 DNS에서 받고 PC는 메모리에 저장(DNS cache)하여 반복해 묻는 것을 방지한다


DNS Cache : DNS로 부터 받아온 정보를 메모리에 저장

Hosts File : IP와 URL이 작성된 파일

공유기가 DNS 역할을 대행할 수도 있다. 공유기가 DNS 포워딩 기능을 할 때 가능

 

Root DNS 

  • 13대 정도 있음(iana.org)
  • DNS를 위한 DNS
  • 일반 DNS도 캐싱을 하기때문에 Root DNS에서 받은 정보를 저장함
728x90