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에서 처리해준다
소켓 통신을 위한 준비
- 서버의 소켓을 열어 연결대기 상태로 만든다
- 클라이언트는 서버의 IP와 Port를 알아야 한다
- 클라이언트도 통신을 위한 소켓을 연다
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 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대요소
- 기밀 : 누가 도청할 수 있는가
- 무결 : 딴 놈이 흉내 낸 거, 나는 '아'라고 했는데 '어'라고 들리게 조작, 변조했다. 그러할 가능성이 없다는 것
- 가용 : 항상 될 수 있게 해주는 것. 이건 재해대잭에 관련됨
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에서 받은 정보를 저장함
'Network' 카테고리의 다른 글
무료 HTTPS 인증(with. Duck DNS, Tomcat9) (0) | 2024.08.07 |
---|---|
네트워크 기본편 마무리 (1) | 2023.11.09 |
오늘도 한다 네트워크공부 (0) | 2023.11.06 |
네트워크 OSI 7 Layer 먼저 하지 말자 (1) | 2023.11.02 |