패킷
이더넷의 원형은 수신처의 정보가 맨 앞에 담긴 신호를 연결된 모든 컴퓨터에게 전달하고, 해당되는 기기는 패킷을 수신하고
나머지는 패킷을 폐기하는 형식이다.
이 후 스위칭 허브를 사용한 이더넷의 형태가 나타났으며, 기존의 전원에게 신호를 보내는 방식에서 수신처 MAC 주소를
나타내는 부분에만 신호를 전달하는 형태로 변경되었다.
MAC 헤더까지 붙은 패킷은 LAN 어댑터에게 전달되고, 패킷은 디지털 신호에서 전기 혹은 빛 신호로 변환되어 네트워크 케이블에 송출된다.
LAN 어댑터는 연결 후 하드웨어 초기화 작업과 이더넷 송수신 동작을 제어하는 MAC 회로에 MAC 주소를 설정한다.
LAN 드라이버는 IP 담당 부분으로부터 패킷을 전달받으면 LAN 어댑터의 버퍼 메모리에 복사한다.
복사를 마친 뒤 패킷 송신 명령을 MAC 회로에 전달하면 MAC 회로의 작업이 시작된다.
MAC 회로는 송신 패킷을 버퍼 메모리에서 추출하고 패킷 맨 앞에 프리앰블과 스타트 프레임 딜리미터라는 두 개의 데이터를,
패킷의 맨 끝에는 프레임 체크 시퀀스(FCS)라는 오류 검출용 데이터를 붙인다.
프리앰블은 송신하는 패킷을 읽을 때의 타이밍을 잡기 위한 것으로, '101010...' 과 같은 1과 0이 번갈아 나타나는 56비트 데이터이다.
이 데이터는 신호로 변경되면 파형의 형태가 되며,이 파형을 통해 수신 타이밍을 판단한다.
스타트 프레임 딜리미터는 프리앰블과 형태가 유사하지만, 마지막 비트 패턴이 조금 다르다. 수신측을 이것을 표시하여
신호에서 데이터를 추출하고, 스타트 프레임 딜리미터가 패킷의 시작을 나타내는 표시가 되는 셈이다.
프레임 체크 시퀀스는 파형이 흐트러져 데이터에 손상이 있었을 경우 이것을 검출하기 위해 사용된다.
프리앰블, 스타트 프레임 딜리미터, FCS 세 가지가 부가되면 네트워크 케이블로 송출하는 형태가 된다.
송신 동작은 리피터 허브를 사용했을 때의 반이중 모드와 스위칭 허브를 사용했을 때의 전이중 모드가 있다.
반이중 모드는 신호 충돌을 회피하기 위해 케이블 내 다른 신호가 흐르는 지 확인 후, 기다렸다가 송신한다.
송신 동작은 MAC 회로가 프리앰블의 맨 앞 1비트부터 전기 신호로 변환하고, PHY(MAU) 송수신 신호 부분에 보낸다.
신호를 송신하는 사이에 수신 신호가 케이블에 흘러들어오는 경우가 발생할 수 있고, 이를 충돌 현상이라 한다.
충돌이 일어났을 경우 충돌 사실을 다른 기기에 알리기 위해 재밍 신호를 전달하고, 송신 동작을 멈추고 기다렸다가
다시 송신 동작을 시작하게 된다.
패킷을 수신하는 경우 신호 맨 앞의 프리 앰블을 이용하여 타이밍을 계산하고, 스타트 프레임 딜리미터가 나오면
그 다음 비트부터 디지털 데이터로 변환하여 동작한다.
PHY(MAU) 회로에서 신호를 공통 형식으로 변환하여 MAC 회로에 보내고, MAC 회로에서 신호를 차례대로
디지털 신호로 변환하여 버퍼 메모리에 저장한다. 그 후 신호의 마지막에 도달하면 FCS를 검사한다.
그 후 MAC 주소를 확인하여 수신처 MAC 주소에 해당하는 경우 패킷을 받아 버퍼 메모리에 저장한다.
이 때 패킷을 수신했다는 사실을 컴퓨터에 통지하기 위해 인터럽트를 사용한다.
패킷의 MAC 헤더 타입 필드로부터 프로토콜을 판별하여 LAN 드라이버가 데이터를 전달한다.
IP 담당 부분은 IP 헤더 부분부터 포맷 문제 여부를 확인하고, 수신처 IP를 조사한다.
만약 수신처 IP 주소에 문제가 있을 경우, 통신 상대에게 ICMP 메시지를 활용하여 오류를 통지한다.
그리고 만약 수신된 패킷이 분할된 것인 경우, 원래 패킷으로 복구하는 과정(리어셈블링)을 거친다.
패킷이 복구된 뒤 TCP 담당 부분으로 데이터가 전달된다. TCP 담당 부분은 수신처 IP 주소와
송신처 IP 주소, 수신처 포트 번호 및 송신처 포트 번호 네 가지 항목을 조사하여 해당 소켓을 찾는다.
해당 소켓이 발견된 후 통신 진행 상태에 따라 적절한 동작이 이뤄지게 된다.
UDP 프로토콜
대부분의 어플리케이션은 TCP 프로토콜을 사용하지만, UDP 프로토콜을 사용하여 데이터를 송수신하는 어플리케이션 또한 존재한다.
단적인 예로 DNS 서버에 IP 주소를 조회할 때도 UDP 프로토콜을 사용한다.
TCP의 동작은 복잡하지만, 그만큼 데이터를 확실하면서도 효율적으로 전달한다.
송수신 과정에서 특정 패킷이 손실되더라도, 도착하지 않은 패킷만 전달하는 구조를 갖추고 있어 TCP는 효율적이라 할 수 있다.
UDP에는 TCP와 같은 수신 확인이나 윈도우가 없어 데이터 송수신 전에 제어 정보를 주고받을 필요가 없고, 접속이나 연결 끊기 단계가 없다.
어플리케이션에서 송신 데이터를 받으면 UDP 헤더를 부가하고 IP에 의뢰하여 송신하는 방식이다.
수신은 IP 헤더에 기록된 수신처 IP 주소와 송신처 IP 주소, 그리고 UDP 헤더에 기록된 수신처 포트 번호와 송신처 포트 번호
총 4가지 항목과 소켓이 기록된 정보를 결합하여 데이터를 건네줄 어플리케이션을 판단하고 전달한다.
UDP는 TCP와 달리 송수신 과정 중 발생하는 패킷 손실에 대한 책임을 지지 않는다.
음성이나 영상의 데이터를 보낼 때도 UDP가 사용된다. 음성이나 영상은 특정 시간 안에 데이터를 건네주어야 하기 때문에,
그만큼 빠른 전송이 보장되어야 하며 만약 데이터의 손실이 발생하여 TCP 방식을 통해 오류 검출 후 재전송이 이뤄지게 되면
TCP에 의해 재전송된 데이터가 도착하더라도 타이밍이 맞지 않아 영상이나 음성에는 사용할 수 없다.
Today 확인 질문
1. LAN 어댑터가 담당하는 제어용 데이터에는 어떤 것들이 있나요?
: 프리앰블, 스타트 프레임 딜리미터, FCS(프레임 체크 시퀀스)가 있습니다.
2. TCP와 UDP의 가장 큰 차이점은 무엇인가요?
: TCP는 송수신 과정에서 손실된 패킷에 대한 재전송을 진행하지만, UDP는 패킷 손실이 발생하더라도 책임지지 않습니다.
그렇기 때문에 TCP는 UDP에 비해 안전한 송수신 방식이며, UDP는 TCP에 비해 빠른 송수신 방식입니다.
References
성공과 실패를 결정하는 1%의 네트워크 원리
'Dev > CS' 카테고리의 다른 글
[네트워크] Day 8 (0) | 2023.12.13 |
---|---|
[네트워크] Day 6 (0) | 2023.12.06 |
[네트워크] Day 4 (0) | 2023.11.29 |
[네트워크] Day 3 (0) | 2023.11.14 |
[네트워크] Day 2 (0) | 2023.11.11 |
댓글