티스토리 뷰

반응형

Step 1.

Application에서 Socket Library의 socket함수 호출. (소켓 정보가 저장될 메모리공간을 확보한다.)

확보한 메모리에 해당 소켓이 초기상태이라는 것을 기록하고 파일 디스크럽터를 Application에 반환한다.

 

Step 2.

Application에서 connect함수 호출. → 서버측 socket에 접속한다.

이 과정에서 TCP Header을 통해 제어정보를 교환해 소켓에 필요한 정보를 기록하고 송/수신이 가능한 상태로 만들게 된다. 송/수신이 가능한 상태라는 것은 버퍼메모리를 확보하는 것 까지를 말한다.

여기서 Socket Library는 URL을 참고해 서버의 IP/Port 등의 정보를 Protocol Stack에게 넘겨주게 된다.

                                (서버측은 Handshake를 통해 해당 정보를 획득한다.)

 

위 접속단계에서는 패킷에 Data가 존재하지 않는 TCP Header만 전달하게 된다.

 

Step 3.

Application에서 write함수 호출. → Application이 Protocol Stack에게 Request Message를 전달한다.

송신용 메모리 버퍼에 데이터를 저장한다. 이 때 해당 버퍼에 어느정도 데이터를 저장하고 나서 송신하게 된다.

 (하지만 이 부분은 fflush등의 함수를 통해 Application에서 제어가 가능하다.)

 

 


Step 4.

LAN 드라이버는 IP 담당 부분에서 패킷을 받으면 그것을 LAN 어댑터의 버퍼메모리에 복사한다. 복사를 마친 후 패킷을 송신하도록 MAC 회로에 명령을 보내면 MAC 회로의 작업이 시작된다.

 

가장먼저 송신 패킷을 버퍼 메모리에서 추출하고, 맨 앞에 프리앰블과 스타트 프레임 딜리미터라는 두 개의 데이터를 추가하고, 맨 끝에는 프레임 체크 시퀀스(FCS)라는 오류 검출용 데이터를 추가한다. 

 

 * 프리앰블 : 패킷을 읽을 때의 타이밍을 잡기 위함. '10101010 ...' 와 같은 데이터로 56bit

 * 스타트 프레임 딜리미터 : '10101011'로 이루어져 있는데 마지막 2개의 비트를 패킷의 개시 위치로 인식.

 * FCS에는 Patrity Bit, CRC 등등이 있고, 1Byte만 변해도 해당 패킷을 폐기한다.

 

Step 5.

MAC 회로가 프리앰블의 제일 앞부터 1Bit씩 차례로 디지털 데이터를 전기 신호로 변환한다.

그리고 이 신호를 PHY(MAU)라는 송/수신 신호부분에 보낸다.

이더넷 케이블의 종류나 전송 속도에 따라 몇 가지 신호 형식이 규정되어 있지만, MAC 회로는 이러한 형식의 차이를 신경쓰지 않고 어느형식으로도 변환할 수 있는 공통 형식의 신호를 PHY(MAU)에게 보낸다.

 

Step 6.

PHY(MAU)는 MAC 회로로부터 받은 신호를 케이블에 송출하는 형식으로 변환하여 송신한다.

 

Step 7.

PHY(MAU)에서 전기신호로 형태를 바꾼 패킷은 RJ-45커넥터를 통해 Twist Pair 케이블에 들어간다.

해당 케이블의 1, 2, 3, 6번만 사용하며 1, 2번(송신용), 3, 6번(수신용) 케이블이다.

 ( 이 케이블을 꼬는 이유 : 잡음 방지. ) → 추가적으로 꼬는 간격이 미묘하게 다르다.

 

 * 크로스 케이블은 송신-수신을 연결하기 위함이고, 주로 PC와 PC를 연결할 때 사용한다.

 

Step 8.

수신동작은 송신동작의 역순이다.

 

 1) PHY(MAU) 회로에서 신호를 공통 형식으로 변환하여 MAC 회로로 보낸다.

 2) MAC 회로에서 신호를 맨 앞부터 차례대로 디지털 데이터로 변환하며 버퍼메모리에 저장한다.

 3) 디지털 데이터로 변환함과 동시에 FCS를 검사하고, 맨 뒤에있는 FCS 값과 비교한다.

    ( 이 때 일치하지 않으면 패킷을 폐기한다. )

 4) MAC 헤더의 수신처 MAC 주소를 조사하여 ROM에 저장된 MAC 주소와

    비교하여 자신의 패킷인지 판단한다.

 5) 자신에게 오는 것인 경우에 패킷을 받아 버퍼메모리에 저장한다.

 6) MAC 회로는 할일을 마친 후 패킷을 수신한 사실을 컴퓨터 본체에 통지합니다.

    ( 인터럽트라는 구조를 사용한다. → Step 9.에서 설명한다. )

 

Step 9.

LAN Adapter의 움직임을 CPU가 항상 감시하는 것이 아니라 다른 프로세스를 처리하고 있는다.

이 때, LAN Adapter가 확장 버스 슬롯에 있는 인터럽트용 신호선에 신호를 보낸다. 그러면 CPU는 하던동작을 보류하고 OS 내부의 인터럽트 처리용 프로그램쪽으로 전환한다. 여기서 LAN Driver가 호출되어 LAN 어댑터를 제어하면서 송/수신 동작을 실행하게 된다.

 

Step 10.

이후에 LAN Driver가 MAC Header의 TypeField를 참고해 프로토콜을 판별하고, 

일치하는 프로토콜 스택에 전달하게 된다. ( 얘는 그냥 무작전 프로토콜을 판별하고 전달한다. - 다른거 신경X )

 

Step 11.

TypeField가 0800이면 IP 프로토콜 스택으로 패킷을 전달하게 된다.

 

프로토콜 스택에서 패킷을 받으면 수신처 IP를 조사하고 자신의 IP와 비교한다.

( 일치하지 않으면 ICMP 패킷을 통해 오류를 통지한다. → Destination Unreachable )

그리고 나눠진 조각이 있다면 하나로 합친다. ( Reassembling )

그리고 TCP 담당부분으로 넘기고 TCP 담당부분은 송/수신자의 IP/Port를 가지고 해당하는 소켓을 찾는다.


 

이더넷에서는 오류검출을 하지 않는다. 왜냐하면 발생률도 낮고, 프로토콜 스택의 TCP를 신뢰한다.

   ( 보내놓고 땡이라는 말이다. )

 

UDP 는 주로 제어용 짧은 데이터(DNS)나 음성이나 영상 데이터 등을 전송할 때 주로 사용한다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함