현재 우리 컴퓨터에서 사용하고 있는 것은 TCP/IP 모델이다.
윈도우-제어판-네트워크 들어가보면?
TCP/IP DNS WINS 802.1X 프록시 하드웨어 (TCP/IP 모델을 사용하고 있는 것을 볼 수 있음)
TCP/IP 계층별 주요 프로토콜
인터넷에서 사용되는 여러 가지 프로토콜을 통틀어 TCP/IP 라고 한다. 이전 블로그에서 다뤘던 OSI 참조 모델과 달리 TCP/IP는 4계층으로 분류한다. 물리 계층에 대한 언급이 없으며, 세션 계층, 표현 계층 및 응용 계층을 합쳐 응용 계층이라고 한다.
- ARP(address resolution protocol)은 LAN 에서 상대 장비의 링크 계층 주소(MAC 주소)를 알아내기 위해 사용하는 프로토콜이다.
- ICMP(internet control message protocol)는 IP 네트워크의 동작 확인을 위한 도구인 핑(ping), 트레이스 루트(traceroute) 등과 같은 프로그램이 사용하는 프로토콜이다.
- IP(internet protocol)는 레이어 3에서 동작하는 프로토콜로 주 용도는 패킷을 목적지 장비까지 전송하기 위한 것이다. IP가 사용하는 헤더는 다음과 같이 구성되어 있다.
1. IP
IP 헤더 (L3 헤더 = 패킷 헤더)
→ 네트워크 계층에서 종단 장비 사이에서 패킷이라는 데이터의 묶음을 전달함.
- 버전(4비트)
IP의 버전. 항상 4. IPv4임을 표시함. - 헤더길이 (4비트)
IP 헤더의 길이를 워드 단위로 표시한다. 1워드는 4바이트이다.
IP 헤더의 최소 길이= 20바이트(5워드 * 4바이트) / 최대 길이= 60바이트(15워드 * 4바이트) - DSCP (6비트)
패킷의 우선순위를 표시 - ECN (2비트)
종단 장비 사이에 혼잡발생을 통보하는 필드 - 전체 패킷 길이 (16비트)
헤더와 데이터를 포함한 전체 패킷의 길이를 바이트 단위로 나타낸다. IP 패킷의 길이는 최소 20바이트이고 최대 65,535 바이트 이다. - ID (16비트)
각 패킷마다 고유하게 부여하는 일련번호. 패킷이 너무 길어 분할하여 전송시, 수신측에서 분할된 패킷을 원래대로 조립할 때 ID 값이 동일한 패킷들을 하나로 만든다. - 플래그 (3비트)
패킷 분할 가능 여부와 분할 시 최종패킷임을 표시한다. - 분할 위치 (13비트)
분할된 패킷이 원래 패킷의 어느 위치에 있었는지 표시한다. ID, 플래그, 분할 위치라는 세 필드의 정보를 이용하여 최종적으로 패킷을 수신한 장비가 분할된 패킷들을 원래의 패킷으로 조립한다. - TTL(time to live) (8비트)
패킷이 두 장비 사이에서 빙빙 도는 패킷 루핑을 방지하기 위한 필드. 라우터가 패킷을 중계할 때마다 TTL 값을 1씩 감소시키고 이 값이 0이 되면 해당 패킷을 폐기한다. - 프로토콜 (8비트)
IP 패킷이 실어 나르는 상위 계층(전송계층) 프로토콜을 표시한다. 예를 들어, TCP를 실어 나르는 중이라면 이 값을 6으로 표시하고 UDP인 경우에는 17로 표시한다. - 헤더 첵섬 (16비트)
IP 헤더의 에러 발생 여부를 확인하는 필드. - 출발지 IP 주소 (32비트)
출발지 장비의 IP 주소를 기록하는 필드. - 목적지 IP 주소 (32비트)
목적지 장비의 IP 주소를 기록하는 필드. - 옵션 (최대 40바이트)
패킷 전송경로 기록 등 추가적인 옵션을 사용하기 위한 필드이지만 잘 사용하지는 않음. - 데이터 (최대 65,515 바이트)
IP 패킷이 실어나르는 데이터가 위치하는 부분. 상위 계층의 헤더들과 실제 데이터를 합쳐 모두 데이터로 간주한다.
2. TCP (transmission control protocol)
TCP와 UDP(user datagram protocol)는 레이어 4에서 동작하는 프로토콜로 주 용도는 IP가 목적지 장비까지 전송한 패킷을 상위의 특정 응용 계층 프로토콜에게 전달하기 위한 것이다.
TCP와 UDP의 가장 큰 차이는 세그먼트(segement) 전달의 신뢰성에 있다. 즉 TCP는 수신한 세그먼트에 에러가 발생했으면 재전송을 요구하여 에러를 복구한다. 이처험 에러 복구 기능이 있는 프로토콜을 ‘신뢰성 있는 프로토콜(reliable protocol)’이라고 한다. 신뢰성 있는 통신을 하려면 각 세그먼트마다 에러 확인 및 복구를 위한 정보를 확인해야 하므로 처리속도가 느리다.
UDP는 에러가 발생한 세그먼트는 폐기시키고, 그것으로 끝. 에러 복구 기능이 없는 프로토콜을 ‘신뢰성 없는 프로토콜(unreliable protocol)’이라고 한다. 신뢰성 없는 통신은 에러 복구 기능이 불필요하므로 처리 속도가 빠르다.
→ TCP는 속도가 느려도 에러 복구가 필요한 파일 전송 등에 사용되고, UDP는 인터넷 전화와 같이 실시간의 빠른 처리 속도가 필요한 프로그램에 사용된다. TCP가 사용하는 헤더는 다음과 같다.
TCP 헤더 (L4 헤더)
- 출발지 포트 번호 (16비트)
출발지 포트 번호 표시. 응용 계층의 종류에 따라 출발지 포트 번호가 정해져 있는 것도 있지만 대부분의 경우 처음 세그먼트를 전송하는 측에서 임의의 번호를 사용한다. - 목적지 포트 번호 (16비트)
목적지 포트 번호 표시. 응용 계층의 종류에 따라 처음 세그먼트를 전송하는 측에서 사용하는 목적지 포트 번호가 정해져 있다. 예를 들어 웹에서 사용하는 HTTP 프로토콜은 80번이다. - 순서 번호 (32비트)
TCP 세그먼트의 순서 번호를 표시한다. 통신을 시작하는 양단의 장비들이 별개로 임의의 번호부터 시작한다. - 수신확인 번호 (32비트)
상대방이 보낸 세그먼트를 잘 받았다는 것을 알려주기 위한 번호. - 데이터 옵셋 (4비트)
TCP 헤더의 길이를 4바이트 단위로 표시한다. TCP 헤더는 최소 20 바이트, 최대 60 바이트이다. - 예비 (4비트)
사용하지 않는 필드이며 모두 0으로 표시 - 플래그 (8비트)
제어 비트 라고도 하며, 세그먼트의 종류를 표시하는 필드. 현재의 세그먼트가 통신 시작을 요청하는 것이라면 플래그 내의 Sync라는 비트를 1로 설정하고, 수신확인 번호를 포함하는 세그먼트라면 Ack 라는 비트를 1로 설정한다. - 윈도우 사이즈 (16비트)
상대방의 확인 없이 전송할 수 있는 최대 바이트 수를 표시한다. - 책섬 (16비트)
헤더와 데이터의 에러를 확인하기 위한 필드 - 긴급 포인트 (16비트)
현재의 순서 번호부터 긴급 포인트에 표시된 바이트 까지가 긴급한 데이터임을 표시한다. - 옵션 (0-40바이트)
최대 세그먼트 사이즈 지정 등 추가적인 옵션이 있을 경우 표시한다.
3. UDP (user datagram protocol)
UDP 헤더
- 출발지 포트 번호 (16비트)
- 목적지 포트 번호 (16비트)
- 길이 (16비트)
헤더와 데이터를 포함한 전체의 길이를 바이트 단위로 표시. - 책섬 (16비트)
헤더와 데이터의 에러 확인하기 위한 필드. UDP 헤더는 TCP 헤더에 비해 간단함. 에러 복구 위한 필드들이 불필요하기 때문.
Connection Oriented (연결 지향) 프로토콜 VS Connectionless (비연결) 프로토콜
- Connection Oriented : 전송하기 전에 상대에게 연락하여 통신할 준비를 하는 프로토콜
EX) TCP, 링크계층의 HDLC, PPP, 프레임 릴레이
- Connectionless : 연락없이 그냥 데이터를 전송하고 끝내는 프로토콜
EX) 링크계층의 이더넷, 네트워크 계층의 IP, 전송 계층의 UDP
TCP 3-way hangshake 란?
TCP/IP 프로토콜에서 연결을 설정할 때 사용되는 과정 (3단계)
1. PC가 웹서버에 ‘통신을 시작하자’라는 의미의 TCP Sync 비트가 설정된 세그먼트를 전송.
2. 웹서버가 ‘당신이 보낸 TCP 세그먼트를 에러 없이 잘 받았다’라는 것을 의미하는 Ack 필드 & ‘좋다. 통신을 시작하자’라는 의미의 TCP 3. Sync 비트가 설정된 세그먼트를 전송한다.
PC도 ‘당신이 보낸 TCP 세그먼트 에러 없이 잘 받았다’ 의미하는 Ack 필드가 설정된 세그먼트를 전송. 이후 실제적인 데이터를 교환하기 시작.
⇒ 이처럼 데이터를 교환하기 전에 세션을 만들기 위해 세번 신호를 교환하므로 이를 TCP 3-way handshake라고 한다.
4. 응용 계층 프로토콜
- DNS (domain name system)
도메인 이름에 대한 IP 주소를 알려줄 때 사용. UDP 또는 TCP 포트 53번을 사용. 일반적으로 DNS는 UDP 포트 53번을 사용하지만, 대량의 데이터를 전송할 때에는 TCP 포트 53번을 사용한다.
- FTP (file transfer protocol)
파일 전송을 위해 사용함. TCP 포트 번호 20번과 21번 사용. 처음 서버에게 파일 전송을 요청하는 클라이언트는 TCP 포트 번호 21번을 사용한다. 이것을 제어접속이라고 하며, 통신이 종료될 때까지 유지된다.
이후 서버가 포트 번호 20을 사용하여 데이터를 전송할 수 있으며, 이 방식을 액티브 모드(active mode)라고 한다. 반대로, 클라이언트가 임의 포트를 이용하여 데이터 전송을 위한 추가적인 세션을 만들 수 있으며, 이 방식을 패시브 모드(passive mode)라고 한다.
- TFTP (trivial file transfer protocol)
FTP에 비해 기능이 적고 단순하게 동작하는 파일 전송용 프로토콜이며 UDP 포트 69번을 사용한다. 시스코사에서 만든 라우터나 스위치 같은 통신 장비의 OS(운영체제)를 IOS라고 하며 이 IOS를 업그레이드 하거나 백업 받을 때 주로 TFTP 프로토콜을 많이 사용한다.
- HTTP (hypertext transfer protocol)
웹(www) 데이터를 전송하기 위한 프로토콜. TCP 포트 80번 사용. HTTP는 전세계적으로 가장 많이 사용되는 응용 계층 프로토콜이며, 설정에 의해 사용 포트 번호를 8080 등으로 변경할 수도 있다.
- SMTP (simple mail transfer protocol)
이메일을 전송할 때 사용하며, TCP 포트 25번을 사용한다.
- 텔넷 (telnet)
원격으로 장비에 접속할 때 사용하는 프로토콜이며 TCP 포트 23번을 사용한다.
- SSH (secure shell)
텔넷과 마찬가지로 원격으로 장비에 접속할 때 사용하는 프로토콜이며 TCP 포트 22번을 사용한다. 보안성이 없는 텔넷과 달리 SSH 는 데이터를 암호화 시켜 전송하고, 전송 도중 데이터의 변조 여부도 확인할 수 있다.
'Network' 카테고리의 다른 글
[ Network ] Router (패킷 트레이서 & 다이나밉스) (0) | 2024.03.08 |
---|---|
[ Network ] LAN 과 Ethernet (ARP 프로토콜) (0) | 2024.03.08 |
[ Linux ] Raw socket & Scapy 실습 - kakao 실무진 특강 (3) (0) | 2024.03.04 |
[ Linux ] 컴퓨터 네트워킹 기초 - kakao 실무진 특강 (1) (0) | 2024.02.29 |
[ Network ] OSI 모델 (7계층) (0) | 2024.02.23 |