이더넷
다수의 컴퓨터가 여러 상대와 자유롭게 적은 비용으로 통신하기 위해 고안된 통신 기술 IP 와 마찬가지로 패킷의 내용물을 보지 않으므로 송수신 동작이 TCP 동작 단계에 상관없이 모두 공통이다.
원형 | 컴퓨터가 신호를 송신하면 트랜시버 케이블을 통해 네트워크 전체에 신호가 흐름 | 신호가 누구에게 가는지 알 수 없으니 신호 맨 앞 부분에 수신처 정보 써둠(MAC 헤더) |
변화 | 트렁크 케이블 → 리피터 허브, 트랜시버 케이블 → 트위스트 페어 케이블 | 신호가 전원에게 전달된다는 기본 성질은 변하지 않음 |
현재 | 스위칭 허브 사용, 전원에게 신호가 가지 않음. | 수신처 MAC 주소로 원하는 기기가 존재하는 부분에만 신호가 흐르고 다른 곳은 신호가 흐르지 않음 |
공통점
- MAC 헤더의 수신처 MAC 주소에 기억된 상대에게 패킷 전달
- 송신처 MAC 주소로 송신처를 나타낸 후, 이더 타입으로 패킷 내용물 나타냄
패킷 송수신
디지털 데이터를 전기나 빛의 신호로 변환하여 네트워크 케이블에 송출. LAN 어댑터가 실행한다. LAN 어댑터는 하드웨어 단독으로 동작하지 않고 LAN 드라이버 소프트웨어가 필요하다.(기본적으로 OS 첨부)
LAN 어댑터 구조
- LAN 어댑터는 전원을 공급하면 즉시 사용할 수 있는 것이 아니라, 다른 하드웨어와 마찬가지로 초기화 작업 필요.
- 전원 공급해서 OS 시동할 때 LAN 드라이버가 하드웨어 초기화 작업을 수행해야 사용 가능한 상태
- 이더넷 특유의 작업이 포함되어 있다.
- MAC 회로에 MAC 주소 설정
- 해당 주소는 전 세계에서 중복되지 않도록 일원화되어 관리된다. 제조할 때 기록되어 있다.
패킷
LAN 드라이버는 IP 담당 부분에서 패킷을 받으면 그걸 LAN 어댑터의 버퍼 메모리에 복사한다. 그 후 패킷을 송신하도록 MAC 회로에 명령을 보내면 MAC 회로에 작업이 시작된다.
프리앰블
송신하는 패킷을 읽을 때의 타이밍을 잡기 위한 것
- 데이터를 읽기 위해 데이터 신호 + 클록 신호를 합성해서 한 개의 신호를 만든다. *비트를 구분하는 신호
- 클록 신호의 타이밍을 잡기 위한 특별한 신호를 패킷 앞에 부가하는 것이 “프리앰블”
스타트 프레임 딜리미터
패킷의 시작을 나타내는 표시
FCS
패킷을 운반하는 도중 잡음 등의 영향으로 파형이 흐트러져 데이터가 변한 경우 검출하기 위해 사용
프리앰블 | 클록 신호의 타이밍을 잡기 위한 신호 |
스타트 프레임 딜리미터 | 패킷 시작 |
FCS | 오류 검출 |
패킷 송신
반이중 모드
송신과 수신 한 쪽만 가능한 것, 리피터 허브를 이용한다.
- 케이블에 다른 기기가 송신한 신호가 있는지 조사
- 신호가 흐르고 있으면 기다림
- 신호가 정지했거나 흐르고 있지 않으면 송신 동작 시작
- 프리앰블 맨 앞부터 1비트씩 차례로 디지털 데이터를 전기 신호로 변환
- PHY 또는 MAU 라는 송수신 신호부분에 보냄
- 이 때 디지털 데이터를 신호로 변환하는 속도가 전송 속도
- PHY(MAU) 회로는 MAC 회로가 송신한 신호 형식을 변환하기 위한 변환 회로
- PHY(MAU) 는 송신 뿐만 아니라 수신 신호 선에서 신호가 흘러들어오는지도 감시
- 송신을 완료할 때까지 수신 신호선에 신호가 들어오지 않으면 송수신 동작 끝!
✅ LAN 어댑터의 MAC 회로가 공통 신호를 만들고 PHY(MAU) 회로가 케이블에 송출하는 형식으로 변환해 케이블에 송신한다.
“이더넷”은 송신 신호가 상대에게 완전하게 도착했는지 확인하지 않는다. 만일 오류가 발생해도 프로토콜 스택의 TCP 가 검출하므로 신호를 송신할 때 오류를 발생할 필요가 없다. *물론 확률은 1만분의 1이하
만약 동시에 복수의 기기가 송신 동작에 들어가 기기가 보낸 신호가 수신 신호선으로 흘러들어온다면
- 리피터 허브를 사용한 반이중 모드의 경우 서로 신호가 섞여 분간할 수 없는 상태가 된다.
- →→→ 충돌!!!!
- 재밍 신호를 잠시동안 흘리고나서 기다린다.
- 충돌이 발생한 경우에 알리는 특수 신호
- 2배씩 대기 시간을 늘려서 보내는데 10번 째에도 다시 보냈는데 해결이 안 되면 오류 판단
전이중 모드
스위칭 허브를 이용해 송신과 수신을 동시에 실행하며, 충돌은 일어나지 않는다. 수신 신호선에서 신호가 흘러들어와도 단순 신호를 보내기만 한다.
패킷 수신
반이중 모드
1대가 송신한 신호가 리피터 허브에 접속된 케이블 전부에 흘러간다. 즉, 자신 뿐만 아니라 누군가가 신호를 보내도 그것이 전부 수신 신호선에서 흘러온다.
- 신호를 전부 받아들인다.
- 프리앰블로 파형에서 타이밍을 계산한다.
- 스타트 프레임 딜리미터가 나오면, 그 다음 비트부터 디지털 데이터로 변환한다. *송신할 때와 반대로 PHY(MAU) 회로에서 MAC 회로 쪽으로 진행한다.
- MAC 회로에서 신호를 맨 앞 부터 차례대로 디지털 데이터로 변환하여 버퍼 메모리 저장
- 신호 마지막에서 맨 끝에 FCS 검사 → 파형이 흐트러지면 오류 패킷으로 간주, 폐기
- MAC 헤더의 수신처 MAC 주소 조사
- 자체 MAC 주소와 비교, 자신 것인지 조사하고 다른 곳에 가는 거라면 폐기
- 자신 것이라면 패킷을 받아 버퍼 메모리에 저장
- 패킷을 수신한 사실을 컴퓨터 본체에 통지
→ 인터럽트 구조 이용
인터럽트
LAN 어댑터측에서 알려주지 않으면 컴퓨터 본체는 패킷의 도착을 알아차리지 못함. 그래서 컴퓨터 본체가 실행하고 있는 작업에 끼어들어 LAN 어댑터 쪽에 주의시키는 행동.
- LAN 어댑터가 확장 버스 슬롯 부분에 있는 인터럽트용 신호선에 신호 보냄
- 신호가 흘러오면 CPU 는 실행하고 있던 작업 일시적으로 보류
- OS 내부의 인터럽트 처리용 프로그램으로 전환
- LAN 드라이버가 호출되어 LAN 어댑터를 제어하며 송수신 동작 실행
→ 인터럽트 번호는 LAN 어댑터를 설치할 때 번호를 하드웨어로 설정한다.
✅ LAN 드라이버는 패킷이 어떤 애플리케이션이 보냈건 상관 없이 타입 필드 값에 대응하는 프로토콜 스택에 패킷을 건내주기만 한다!
응답 패킷을 IP → TCP 로 넘기기
- LAN 드라이버는 TCP/IP 스택에 패킷을 건넨다.
- IP 담당은 IP 헤더를 조사해 포맷에 문제가 없는지 확인하고 수신처 IP 주소를 조사한다.
- 수신한 기기가 윈도우 클라이언트 PC 라면 서버에서 회신된 패킷의 수신처 IP 주소는 수신한 LAN 어댑터에 할당된 주소와 일치할 것.
- 이것을 확인하고 패킷을 수신
수신처 IP 주소가 내 주소가 아니에요
IP 담당이 ICMP 메시지 사용하여 상대에게 오류 통지
수신처 IP 주소가 올바르다면
만약 수신한 패킷이 분할된 것이면 IP 담당이 그걸 원래의 패킷으로 되돌린다 → 리어셈블링
리어셈블링이 끝나면 패킷을 TCP 담당에게 전달한다. 그러면 TCP는
- IP 헤더
- 수신처의 IP 주소
- 송신처 IP 주소
- TCP 헤더
- 수신처 포트 번호
- 송신처 포트 번호
네 가지 항목을 찾아 해당하는 소켓을 찾고, 상황에 따라 적절한 동작을 실행한다!
'개발공부 개발새발 > Network' 카테고리의 다른 글
Network ) 허브 & 스위치 & 라우터 (1) | 2023.07.28 |
---|---|
Network ) UDP Protocol (0) | 2023.07.27 |
Network) 연결 끊기와 데이터 송수신 요약 (0) | 2023.07.27 |
Network) 데이터 송수신 (0) | 2023.07.27 |
Network) 서버에 접속하자! (0) | 2023.07.26 |