1. Packet
TCP 담당 부분은 연결, 송수신, 연결 끊기의 각 단계에서 통신 상대와 대화할때 IP 담당 부분에 의뢰하여 데이터를 packet의 모습으로 만들어 상대에게 보낸다.
그러면 IP 담당 부분이 어떻게 packet을 상대에게 송신하는지 알아보자.
- Packet은 control information 등이 기록된 header와 data 두 부분으로 구성된다.
- 먼저 packet sender 기기가 packet을 만든다. Header에는 제어정보를 기록하고 데이터 부분에는 일정 데이터를 넣은 후 packet을 가장 가까운 중계 장치에 송신한다.
- Packet이 가장 가까운 중계 장치에 도착하면, 중계 장치는 packet의 header을 조회하여 packet destination을 판단한다
- 이때, 어느 receiver이 어느 방향에 있는지에 대한 정보를 기록한 표를 사용한다. 즉, packet header에 기록되어 있는 수신처와 표에 등록된 내용을 결합하여 packet receiver이 표의 어느 부분에 해당하는지를 찾아내고, 거기에 등록되어 있는 내용에서 packet의 목적지를 판단한다.
- ex) Packet의 수신처와 표를 결합해서 “xx라는 주소는 xx번째 케이블” 이라는 것을 알았으면, xx번째 케이블에 packet의 신호를 송신한다
- 이렇게 destination을 향해 packet을 송신하면 다음 중계 장치에 도착해서 똑같은 동작을 반복하여 최종 receiver device에 도착한다
Receiver에 packet이 도착하면 보통 sender을 향해 다시 회답 packet이 되돌아온다. 그러므로, 한 기기는 sender & receiver 둘다 될 수 있으므로, 보통 둘을 구분하게 않는다.
- 이러한 경우 sender와 receiver을 묶어서 end node라고 부른다.
TCP/IP의 packet
TCP/IP의 packet 구조는 이것보다 조금 더 복잡하다
- 2 종류의 Packet 중계 장치
- Router: Destination을 확인하여 다음 router를 나타낸다
- Hub: Subnet안에서 packet을 운반하여 다음 router에 도착한다
- Hub는 Ethernet의 규칙에 따라 packet을 운반하고, Router은 IP의 규칙에 따라 packet을 운반한다.
- IP가 destination을 확인하여 다음 IP의 중계장치를 나타낸다
- Subnet안에 있는 Ethernet이 중계 장치까지 packet을 운반한다
조금 더 구체적으로 말하면, TCP/IP의 packet에는 아래 그림과 같이 두개의 header가 붙어있다.
- MAC header (Ethernet용 header)
- IP header (IP용 header)
IP Packet을 운반하는 원리
- Client -> Hub
- 먼저 sender에서 packet destination인 access 대상 서버의 IP address를 IP header의 수신처에 기록한다.
- IP는 이 수신처가 어느 방향에 있는지를 조사하고, 그 방향에 있는 다음 router을 조사한다 (R1). 이때, 다음 router에 할당된 Ethernet의 주소 (MAC address)를 조사하고, 그것을 MAC header에 기록한다.
- 이렇게해서 의뢰를 받은 Ethernet에게 어느 router에 packet을 도착하면 좋은지를 전달한다. 이렇게 해서 packet을 송신하면 (1), Ethernet의 원리에 따라 움직이는 Hub에 도착한다.
- Hub -> Router (R1)
- Hub에는 packet destination을 판단하기 위한 표(Ethernet용 표)와 같은 것이 있어서, Ethernet header의 수신처 정보와 표를 결합하여 packet의 목적지를 판단하여 중계한다.
- 그러면 packet은 다음 router에 도착한다 (2)
- Router -> … -> Server
- Router에는 IP용 표가 있으므로, 이것과 IP header의 수신처를 결합하면, 다음에 어느 router에 packet을 중계하면 좋을지가 결정된다.
- 그리고 다음 router에 packet을 건네주기 위해 MAC address를 조사하고, 이것을 MAC header에 기록한다. (MAC header을 바꾸어 쓰면 된다). 그리고 packet을 다음 라우터에 송신한다 (3)
-> 위 그림에는 안나와있지만, R1에서 다음 허브, 라우터 등을 경유해서 이것을 반복해서 최종 목적지에 packet이 전달되는 것이다.
IP와 Ethernet의 역할 분담
- 위에서와 같이 IP와 Ethernet의 역할을 분담하는 이유가 있다
- Ethernet부분은 다른것으로 대체할 수 있다.
- 무선 LAN, ADSL, FTTH 등 IP의 의뢰를 받아 packet을 운반할 수 있는것이라면 무엇이든지 Ethernet을 대체할수 있다.
- 따라서, 상황에 맞게 IP와 조합하여 역할을 분담하여 적재적소에 사용할 수 있어 유연성이 높아진다.
2. Packet 송수신 동작의 개요
앞에서 전체적인 통신 동작을 살펴보았다. 다음은 protocol stack의 IP 담당 부분의 packet 송신 동작에 대해 알아보자.
- IP 담당 부분은 packet을 상대에게 송출만 하기 때문에, 실제로 packet을 운반하는 것은 router이나 hub같은 네트워크 기기의 역할이다.
- IP 담당 부분은 packet을 운반하는 전체 동작에서 “입구 부분”에 불과하다.
- Packet 송수신 동작의 출발점: TCP 담당 부분이 IP 담당 부분에 packet 송신을 의뢰한다
(1)
- 의뢰 둥작을 할 떄, TCP 담당 부분은 데이터의 조각에 TCP header을 부가한 것을 IP 담당 부분에 건네준다.
- 이것이 packet에 들어가는 내용물이 되고, 동시에 receiver의 IP address를 나타낸다.
- 의뢰를 받은 IP 담당 부분은 IP header와 MAC header을 부가한다.
- TCP 담당 부분으로부터 받은 의뢰 내용 전체를 (TCP header 포함) 하나의 데이터로 간주하고, 그 앞에 IP header와 MAC header을 부가한다.
- IP header: IP protocol 규칙에 따라 IP address로 표시된 destination까지 packet을 전달할떄 사용하는 control info
- MAC header: Ethernet등의 LAN을 사용하여 가장 가까운 router까지 packet을 운반 하는데 사용하는 control info
Header Address Mac header Ethernet용 header MAC address IP header IP용 header IP address - 이렇게 덧붙여서 만든 packet을 네트워크용 하드웨어 (Ethernet이나 무선 LAN)에게 건네준다
(2)
- 데이터는 LAN Adaptor에 의해 전기나 빛의 신호 상태로 바뀌어 케이블에 송출된다.
- LAN은 PC의 확장 슬롯에 장착해서 사용하는 보드형과 노트북, PC등에 사용하는 PC 카드형 등 다양하게 있지만, 혼동을 막기 위해 이 책에서는 LAN adapter이라고 부른다.
- IP 담당 부분에서 LAN adapter에게 건네줄 때의 packet의 모습은 0 or 1 bit가 이어진 디지털 데이터이고, 이것이 LAN adapter에 의해 전기나 빛의 신호 상태로 바뀌어 케이블에 송출된다.
- 신호는 hub나 router등의 중계장치에 도착하고, 중계 장치가 상대가 있는 곳까지 packet을 전달한다.
- 상대에게 packet이 도착하면 회답이 되돌아온다.
- 이 회답도 중계 장치가 여기까지 운반해 온다. 수신 동작은 송신 동작의 반대다.
- 케이블에서 signal(packet의 형태)가 들어오면 이것을 LAN adapter에서 bit로 바꾼다.
- 그리고 packet을 IP 담당 부분에 넘겨준다
(3)
- 그러면 IP 담당 부분이 MAC header와 IP header 뒤에 있는 내용물, 즉 TCP header와 데이터 조각을 TCP 담당 부분에게 건네준다.
- 이후에는 앞에서 설명한 TCP 담당 부분으로 넘어간다.
각 단계에서 다양한 역할을 가진 packet이 등장했는데, 여기서 주의해야 할 점이 있다.
IP 담당 부분은 TCP header + 데이터 조각을 한 덩어리의 binary data로 간주하여 “내용을 보지않고” 송수신 동작을 실행하기 때문에, packet의 역할에 상관없이 모두 같다.
따라서, IP 담당 부분은 데이터 조각이 없고 TCP header만 있던, 두가지 다 들어있는지 신경쓰지 않는다. 당연히 TCP의 동작 단계에도 신경쓰지 않는다. 이 말은 packet의 순서가 바뀌거나 없어져도 상관하지 않는다.
3. 수신처 IP address를 기록한 IP header을 만든다
IP 담당 부분은 TCP 담당 부분에서 packet 송수신 의뢰를 받으면 IP header을 만들어 TCP header의 앞에 붙힌다.
IP header은 20 bytes
를 차지하며 다음과 같은 field를 갖는다.
- 수신처 IP address
- 가장 중요한것은 수신처 IP address다.
- Appliation에서 통지된 상대의 IP address를 TCP 담당 부분이 받고, 다시 IP 담당 부분으로 넘겨준것이다.
- 따라서, IP는 스스로 수신처를 판단하지 않고, application이 지정한 상대에게 packet을 송신할 뿐이다.
- 송신처 IP address
- 컴퓨터에 할당된것이 아니라, LAN adapter에 할당된 것이 IP address이다.
- 여러개의 LAN adapter을 장착하면 한 컴퓨터 내에서 여러개의 IP address를 가지게 된다.
- Protocol number
- Packet에 들어간 내용이 어디에서 의뢰받은 것인지를 나타낸다
- TCP:
06
- UDP:
17
Packet을 건네줄 상대를 판단하는 방법은 router이 IP용 표를 사용하여 다음 router을 결정하는 동작과 같다.
Protocol stack의 IP 담당 부분과, router의 packet을 송수신하는 부분은 IP의 규칙에 따라 packet을 송수신한다는 점에서 아무것도 달라지지 않으므로, 같은 방법을 사용한다.
Routing Table (경로표)
Router의 IP용 표를 routing table (경료표)이라고 한다. 아래는 경로표의 예시다.
- 먼저 socket에 기록되어 있는 수신처 IP address를
Network Destination
과 비교하여 어느 row에 해당하는지 찾아낸다.- IP 주소의 왼쪽 부분이 일치하는 것을 찾아낸다 (ex. TCP에서 통지된 수신처 주소가
192.168.1.21
이면192.168.1
이 일치한다). 어디까지 일치하면 된느가는 규칙으로 정해져있다 (3장에서 설명)
- IP 주소의 왼쪽 부분이 일치하는 것을 찾아낸다 (ex. TCP에서 통지된 수신처 주소가
- 이렇게 해서 해당하는 row를 찾아내면,
Interface
항목과Gateway
항목을 찾는다. - Interface 항목
- LAN adapter 등의 네트워크용 인터페이스를 나타낸다.
- Gateway 항목
- 다음 router의 IP address를 나타낸다
Gateway는 TCP/IP 세계에서 router를 가리키는 용어다.
- 기본 Gateway
Network Destination
과Netmask
가 0.0.0.0으로 등록되어 있는데, 이것은 기본 gateway를 나타낸다. 즉, 다른 곳에 일치하는 것이 없으면 이 row에 해당하는 것으로 간주한다.
4. Ethernet용 MAC header을 만든다
IP header을 만들었으면, IP 담당 부분의 앞에 MAC header을 붙인다.
- IP header의 receiver IP address를 보고 packet을 어디에 운반해야되는지를 판단헀다.
- 하지만, Ethernet에서는 TCP/IP개념이 안먹힌다. 이때, Ethernet의 수신처 판단 구조로 사용되는 것이 MAC header이다.
MAC Address
IP에서 IP address가 주소였다면, Ethernet에서는 MAC address이다
수신처 판단 구조 | Bit | Format | |
---|---|---|---|
IP | IP header의 receiver IP address | 32 bit | xx동 xx번지 |
Ethernet | MAC header의 MAC address | 48 bit | 전체를 하나의 값 |
MAC header에 기록되는 항목
Bit | 설명 | |
---|---|---|
수신처 MAC address | 48 bit | Packet을 보낸측의 MAC address. LAN에서의 packet delivery에 쓰이는 주소 |
송신처 MAC address | 48 | Packet을 받는측의 MAC address. Packet을 받았을때 이 값에 따라 누가 보냈는지를 판단 |
EtherType | 16 bit | 사용하는 프로토콜의 종류. 대표적으로는 TCP/IP에 사용하는 0800 과 0806 이다. |
- IP
- IP header뒤에 이어지는 것이 packet의 내용물
- Protocol number: 내용물이 어디에서 의뢰되었는지를 나타낸다
- Ethernet
- EtherType까지가 내용물
- 그 뒤에 이어지는것이 packet의 내용물
- Ethernet의 내용물은 IP, ARP라는 protocol socket이며, 각각에 대응하는 값이 규칙으로 정해져 있으니까 이것을 기록한다.
- EtherType
- Protocol의 종류
- 송신처 MAC Address
- LAN adaptor의 MAC address (LAN adaptor을 제조할때 ROM에 기록)
- 수신처의 MAC Address
- Packet을 건네주는 상대의 MAC address를 기록해야 한다.
- 하지만, 이 시점에서는 아직 누구에게 packet을 건네줄지 모르기 때문에, “우선 packet을 건네줄 상대가 누구인지”를 조사하게 되는데, 이건 routing table에 기록되어 있다.
- Routing table에서 찾은 일치하는 row의 Gateway 항목에 기록되어 있는 IP address의 device가 packet을 건네줄 상대가 된다.
- Packet을 건네줄 상대를 알았으면, 상대의 MAC address를 구해야한다.
- 하지만, 이 시점에서 상대의 MAC address는 모르기 때문에, IP address에서 MAC address를 조사”한다
5. ARP로 수신처 router의 MAC Address를 조사한다
위에서 봤듯이, 다음으로 해야할 일은
IP address로부터 ARP (Address Resolution Protocol)을 이용하여 MAC address를 조사한다.
ARP 개념은 간단하다.
- Ethernet에는 연결되어 있는 모두에게 packet을 전달하는 broadcast 기능이 있다.
- Broadcast를 이용하여 모두에게 “xx라는 IP 주소를 가지고 있는 사람~?”라고 질문하면, 해당자는 “저가 있어요! 제 MAC address는 xxx입니다!” 라고 응답이 돌아오는것이다.
- Routing table의 내용이 올바르면 상대는 같은 subnet에 존재하지만, 만약 존재하지 않으면 ARP response가 돌아오지 않고, 이 경우 상대가 없는것이 되어 packet의 송신동작이 실패로 끝난다.
- MAC address를 응답으로 받으면 이것을 MAC header에 설정하여 MAC header을 만든다
맥북에서는 arp -a
커맨드를 이용하여 ARP Cache를 확인할 수 있다.
ARP Cache
Packet을 보낼때마다 이 동작을 하면 ARP의 packet이 너무 많아지기 때문에, 한번 조사했으면 ARP cache라는 memory 영역에 캐싱해둔다.
- 즉, packet을 송신할때 우선 ARP cache를 조회하고 cache hit이면 거기에 있는 값을 사용하고, 없으면 ARP를 조회한다.
ARP cache에 저장된 내용을 계속 쓰면 IP 주소를 설정하여 바뀐 경우, outdated된 값을 받을 수 있다. 따라서, ARP cache에 저장된 값은 시간이 지나면 삭제한다.
다만, IP address를 다시 바꾼 바로 직후에는, 여전히 outdated 값이 남아있기 때문에 오류가 발생할 수 있다.
MAC header을 만드는것도 IP 담당 부분의 역할이다.
- Mac header은 Ethernet에서 사용하기 때문에 IP 담당 역할이 아니라고 생각할수 있지만, IP가 담당하는게 더 좋은 방법이다.
- LAN adaptor에 건네주기전에 IP 담당 부분에서 packet을 완성하면, LAN adaptor은 완성된 packet만 보내면 된다.
- 그러면 IP 이외의 특수한 packet도 한개의 LAN adaptor으로 보낼수있다!
6. Ethernet의 기본
IP 담당 부분이 packet을 완성헀으면 LAN adapter이 나설 차례인데, 그 전에 Ethernet의 기본부터 알아보자.
Ethernet
Ether은 다수의 컴퓨터가 여러 상대와 자유롭게, 적은 비용으로 통신하기 위해 고안된 기술이다. 구조는 매우 간단하다.
1) Ethernet의 원형 (10BASE5)
Ethernet의 원형은 그림 (a)와 같이, 네트워크의 실체는 cable (케이블)만 있다.
- Transceiver이라는 작은 기기도 있지만, 이 녀석은 연결한 케이블 사이에 신호를 흘리는 역할만 한다.
원형의 통신 동작
- 컴퓨터 신호를 송신하면, 케이블을 통해 네트워크의 전체에 신호가 흐르고, 모두에게 신호가 도착한다.
- 마치, 큰 방에 모두가 모여있고, 한사람이 소리를 지르면 모두가 듣는것과 마찬가지다
- 이런 동작만으로는 수신처와 송신처를 판단할수 없으므로, signal의 앞부분에 MAC Header를 붙힌다.
- MAC Header
- 수신처 MAC address
- 해당하는 기기는 packet을 수신하고, 다른 기기들은 packet을 폐기한다
- 송신처 MAC address
- EtherType
- Packet에 어떤 내용물이 들어있는지
- 수신처 MAC address
- MAC Header
2) Repeater Hub를 이용한 파생형 Ethernet (10BASE-T)
Ethernet의 원형이 (b)의 모습으로 변했다.
- 트렁크 케이블 -> repeater hub
- 트랜시버 케이블 -> 트위스트 페어 케이블
로 바뀌었지만, 신호가 전원에게 전달되는 기본적인 성질은 동일한다
3) Switching Hub를 이용한 Ethernet
현재의 Ethernet 구조이다.
10BASE-T (b) 구조와 비슷해 보이지만 중요한 점이 달라졌다.
수신처 MAC Address로 나타내는 원하는 기기가 존재하는 부분에만 signal이 흐르고, 다른 곳에는 신호가 흐르지 않는다.
이와 같은 변화는 있지만, MAC header의 수신처 MAC address에 기록된 상대에게 packet을 전달하고, 송신처 MAC address로 송신처를 나타낸 후, EtherType으로 packet의 내용물을 나타낸다는 점은 지금도 변하지 않았다.
Ethernet에 접속된 기기는 “Ethernet”이라는 하나의 사양에 기초하여 동작하기 떄문에, client PC뿐만 아니라 server과 router를 포함한 모든 기기에 공통적으로 적용된다.
Ethernet도 IP와 마찬가지로 packet의 내용물은 보지 않으므로, Ethernet의 송.수신 동작은 TCP 동작 단계에 상관없이 모든것에 공통이다.
7. IP Packet을 전기/빛 signal로 변환하여 송신한다.
이제 Ethernet packet의 송수신 동작에 대해서 살펴보자.
- IP에서 만든 packet은 디지털 데이터이므로 그대로 상대에게 보낼 수 없다.
- 따라서 LAN Adapter이 디지털 데이터를 전기나 빛의 신호로 변환하여 네트워크의 케이블에 송출한다. 이것이 송수신 동작의 본질이라 할 수 있다.
LAN adapter은 단독으로는 동작할수 없고, LAN adapter을 제어하는 LAN driver software이 필요하다.
- 이건 LAN 어댑터에만 한정이 아니고, 키보드, 마우스, 등 모든 하드웨어에 공통이다.
- LAN adapter의 구조는 제조 업체나 기종에 따라 달라지므로, LAN driver은 LAN adapter 제조업체가 준비한 전용 제품을 사용한다.
LAN Adapter의 구조
- 실제 제품의 구조는 제조업체나 기종에 따라 다를 수 있다.
송신동작을 살펴보기 전에, LAN adapter를 초기화하는 동작부터 살펴보자.
- LAN adapter은 전원을 공급하면 즉시 사용할수 있는게 아니다.
- 다른 하드웨어와 마찬가지로, 초기화 작업이 필수다.
- 즉, 전원을 공급하여 OS가 시동될때, LAN driver가 하드웨어의 초기화 작업을 수행해야 사용가능하다
- 이 초기화 작업에는 하드웨어 이상검사, 초기 설정 등 LAN adapter 이외의 하드웨어와 공통인 작업도 많지만, Ethernet 특유의 작업도 있다.
- 그 특유의 작업이 바로, Ethernet의 송수신 동작을 제어하는 MAC 회로에 MAC Address을 설정하는 것이다.
LAN adapter의 초기화 작업중에, MAC 회로에 MAC address를 설정한다.
MAC (Media Access Control): MAC 헤더나 MAC 주소에 나오는 MAC이 이부분을 가리킨다.
- LAN adapter의 ROM에는 전 세계적으로 중복되지 않도록 일원화한 MAC address을 제조할 때 기록한다.
- 따라서, 초기화 작업중에 이 MAC 주소를 읽어와서 MAC 회로에 설정 하는것이다.
- 이렇게 해서 MAC 회로는 자체에 할당된 MAC 주소가 무엇인지 알수있다.
- 전원을 공급할때 ROM에 기록된 MAC 주소가 자동적으로 유효한게 아니고, LAN driver이 초기화 작업에서 MAC 회로에 설정한 MAC address가 유효한 것이다.
- OS를 기동할때 이 초기화 작업을 끝낸 후에, IP에서 의뢰를 기다린다
LAN adapter의 ROM에는 전세계적으로 중복되지 않도록 일원화되어 관리되는 MAC address가 제조할때 기록되어있다.
LAN adapter에 기록된 MAC address는, LAN driver이 MAC 회로에 설정한다
8. Packet에 3개의 제어용 데이터를 추가한다
이제 packet을 전기 신호로 변환하여 실제로 케이블에 송출할 차례다.
- LAN driver은 IP 담당 부분에서 packet을 받으면, 그것을 LAN Adapter의 Buffer 메모리에 복사한다.
- 복사를 마친 후에, packet을 송신하도록 MAC 회로에 명령을 보내면, MAC 회로의 작업이 시작된다.
MAC 회로는 먼저, 송신 packet을 LAN adapter의 buffer 메모리에서 추출하고,
- 맨 앞에는 Preamble(프리엠블)과 Start Frame Delimiter(스타트 프레임 딜리미터)라는 데이터를 부가한다
- 맨 끝에는 FCS (Frame Check Sequence)을 부가한다.
1) Preamble (프리엠블)
Preamble은 송신하는 packet을 읽을 때의 타이밍을 잡기 위한 것이다.
56 bit
로 이루어져있다.- 이 56비트짜리
1010...
를 신호로 바꾸면, 위의 그림과 같이 일정한 파형이 된다. - 수신측이 신호를 수신할때, 이 파형에서 타이밍을 판단한다.
더 자세히 이해하기 위해서 먼저 신호에서 데이터를 읽을 때의 동작을 살펴보자.
신호에서 데이터를 읽는 동작
- 디지털 데이터 -> 전기 신호: 0/1 비트값을 전압/전류에 대응시킨다 (그림 (a) 처럼)
- 전기 신호 -> 디지털 데이터: 이 대응을 반대로 실행
- 하지만 실제 신호에는 위의 그림과 같이, 비트를 구분하는 보조선이 있으므로, 구분이 어디까지인지 판단하면서 전압을 읽어야 하는데, (a)의 오른쪽 값과 같이 계속 1이나 0이 이어지면 비트 구분을 할 수 없다.
- 이 문제를 해결하기 위한 가장 쉬운 방법은, 별도로 bit 구분을 나타내는 Clock이라는 신호를 보내는 방법이다.
- (b)와 같이, clock 신호가 아래에서 위로 변화 할때, 신호의 전압/전류 값을 읽고, 이를 0/1로 매핑시킨다.
- 그러나 또 문제가 있다..거리거 멀어져서 케이블이 길어지면, 신호선의 길이가 달라져서 데이터 신호와 clock 신호가 전달되는 시간에 차이가 생겨 clock이 틀어져 버린다.
9. Hub를 향해 packet을 송신한다
Preamble (프리엠블), Start Frame Delimiter(스타트 프레임 딜리미터), FCS(Frame Check Sequence)
이 3가지를 부가하면, 케이블에 송출되는 packet이 완성된다.
신호를 송신하는 동작 허브 종류에 따라 송신 모드가 다르다.
허브 종류 | 모드 |
---|---|
리피터 허브 | 반이중 모드 |
스위칭 허브 | 전이중 모드 |
반이중 모드
- 반이중 모드는, 신호의 충돌을 피하기 위해 먼저 케이블에 다른 기기가 송신한 신호가 흐르는지 확인하고, 신호가 흐르고 있으면 끝날 때까지 기다린다.
신호가 정지했거나 애초부터 흐르지 않았으면 송신 동작을 실행한다
- 이 송신 동작은 먼저 MAC 회로가 preamble의 맨 앞 부분부터 1bit씩 차례로 전기 신호로 변환한다
- 이것을, PHY (aka MAU)라는 송.수신 신호 부분에 보낸다.
PHY(MAU) 회로
- MAC 회로에서 받은 신호를, 케이블에 받은 형식으로 변환하여 송신한다.
- Ethernet은 케이블에 따라 몇 가지 신호 형식이 다르지만, MAC 회로는 상관 안쓰고 공통 형식의 신호를 PHY(MAU)에 보낸다.
- 그리고 PHY(MAU) 회로에서, 실제로 케이블에 송출하는 형식으로 변환한다.
- 즉, PHY(MAU) 회로는 MAC 회로가 송신한 신호의 형식을 변환하기 위한 회로이다.
LAN adapter의 MAC 회로가 공통 형식의 신호를 만들고, PHY(MAU) 회로가 케이블에 송출하는 형식으로 변환하여, 케이블에 송신한다.
PHY(MAU)회로가 MAC 회로에서 받은 신호를 케이블에 송신할 때는 수신 신호선에서 신호가 흘러들어오는지 감시한다.
- 송신하기전에 수신 신호선에 신호가 흐르지 않는것을 확인하고 송신한다.
- 그리고 신호 송신을 완료할때까지 수신신호선에 신호가 들어오지 않으면 송수신 동작을 완료한다.
- Ethernet은 상대에게 신호가 완전히 도착했는지 확인안한다.
- 보통 Ethernet에서 기기들을 연결하는 케이블 길이는 100m 안쪽이라 오류가 좀처럼 발생하지 않는다.
- 발생더라도 protocol stack의 TCP가 체크한다.
- 신호를 송신하고 있는 중에 수신 신호가 들어올수도 있다
- 복수의 기기의 송신을 할 경우에 발생
- 만약 동시에 송신 동작을 하는 기기가 있으면, 기기가 보낸 신호가 수신 신호선으로 들어온다.
- 리피터 허브를 사용한 반이중 모드에서는, 이런 경우가 되면 서로의 신호를 분간 못하는 상태가 되는 충돌 현상이 발생한다.
- 이때는 송신을 계속하는 의미가 없으므로 송신 동작을 중지한다.
- 그리고, 충돌이 일어난것을 다른 기기에 알리기 위해 jamming signal(재밍 신호)를 흘리고, 송신 동작을 멈추고 잠시 기다렸다가 다시 송신 동작을 시도한다.
- 이때 충돌을 ㅇ리으킨 기기의 대기 시간이 동일하면 또 충돌이 일어나므로, 대기 시간을 중복되지 않도록 고안되어 있다.ㄷ
- 충돌하면 대기 시간을 계속 2배씩 늘리다가, 열 번째까지도 실패하면 오류로 판단한다.
10. 돌아온 packet을 받는다
자 이제 LAN adapter에서 packet을 전기 신호로 변환하여 송출하는 모습을 살펴보았다.
이제packet을 수신하는 동작을 알아보자.
- Repeater hub를 이용한 반이중 동작의 Ethernet에서는, 1대가 송신한 신호가 리피터 허브에 접속된 케이블 전부에 흘러간다
- 그러므로, 수신 동작은 이러한 신호를 전부 받아들이는 것부터 시작한다.
수신 동작 과정
- 신호의 맨 앞에는 preamble이 있으므로, 파형에서 타이밍을 계산하여 start frame delimiter이 나오면, 그 다음 비트부터 디지털 데이터로 변환하여 동작을 개시한다.
- 송신과는 반대로, PHY(MAU) 회로에서 MAC 회로로 진행된다
- PHY(MAU): 신호를 공통 형식으로 변환후 MAC 회로로 보냄
- MAC 회로: 신호를 맨 앞부터 차례대로, 디지털 데이터로 변환하여 buffer memory에 저장
- 신호의 맨 마지막에 이르면, 맨 끝의 FCS을 검사한다.
- Packet의 맨 앞부터 계산식으로 FCS의 값을 계산하고, 맨 끝에 도달하면 패킷의 FCS랑 비교한다
- FCS에 문제가 없으면, MAC Header의 MAC Address을 조사한다.
- LAN adapter을 초기화할떄 이미 설정한 자체의 MAC 주소가 이것이랑 일치한지 비교한다.
- 일치하면 buffer memory에 저장
- 불일치하면 폐기
- 이렇게 해서 MAC 회로가 할일이 끝나면, packet을 수신한 사실을 컴퓨터 본체에 통지한다.
- 이떄, interrupt를 사용한다.
- 이 interrupt에 의해 LAN driver이 동작하고, LAN adapter buffer memory에서 수신한 packet을 추출하면, LAN driver은 MAC header의 타입필드의 값으로부터 protocol을 판별한다.
- TCP/IP가 대부분이긴하다.
11. 서버의 Response Packet을 IP에서 TCP로 넘긴다
웹 서버에서 packet이 돌아왔다고 하자. 다음 protocol stack의 동작은:
- Server에서 반송된 packet의 타입은 0800 이므로, LAN driver은 TCP/IP의 protocol stack에 packet을 넘긴다.
- IP 담당 부분은 IP header를 조사하여 포맷에 문제가 없는지 확인하고 수신처를 조사한다.
- Packet을 수신한 기기가 client PC였으면, 서버에서 회신된 packet의 수신처 IP address는 수신한 LAN adapter에 할당된 주소와 일치할 것이다.
- 만약 수신처 IP address가 자신의 주소와 다르면, 오류가 있는 것이므로 IP 담당 부분이 ICMP라는 메시지를 사용하여, 통신 상대에게 오류를 통지한다. (Client PC의 경우 패킷을 중계하지 않으니까 자신에게 올 것 이외의 패킷이 없다)
- 수신처 IP address가 올바르면 이것을 수신하지만, 그 전에 만약 수신한 packet이 분할된 packet이면 IP 담당 부분은 원래 packet으로 재조립하고 복원한다.
- 분할된 packet은 IP header에 잇는 flag라는 항목을 보면 알수있다. 수신 packet이 분할된 것이면 IP 담당 내부의 memory에 일시적으로 보관한다. 그리고 IP header에 있는 ID 정보에 “같은 값을 가진 패킷”이 도착하기를 기다린다. 분할된 packet은 ID 정보의 값이 같으니까 재조립할떄 쓰인다.
- 또한, fragment offset이라는 항목에는 분할된 packet의 원래 순서가 있다.
- 따라서, 이 정보들을 통해서 원래 packet으로 reassembling한다.
- 이것으로 IP 담당 부분의 역할은 끝나고, reassembling 후에는 packet을 TCP 담당 부분에 건네준다.
- 그러면 TCP 담당 부분은 IP header에 기록된 수신처 IP 주소, 송신처 IP 주소, TCP header에 기록된 송신처 port number 및 수신처 port number의 4가지 항목을 조사하여, 해당하는 socket을 찾는다
- 해당하는 socket을 찾으면, 통신의 진행 상태가 기록되어 있으므로 상황에 따라 적절한 동작을 실행한다.
TCP/IP: 엄밀히 말하면 TCP header은 TCP에서 담당하고, IP header은 IP에서 담당하는게 맞다. 하지만, 이렇게 엄밀히 하면 대화 시간이 길어져 실행 효율이 저하되기 때문에, 담당 범위를 여유 있게 해석하여, TCP 담당 부분과 IP 담당 부분을 엄밀히 나누지 않고 하나의 프로그램으로 묶어 융통성이 있는 형태로 만드는게 실리적이다.