밑에 대기형님이 설명해 보라던거 나름대로 해봤는데 피드백 부탁드립니다.
솔직히 큰 그림만 그려져서 세부적인 거는 책보면서 적었어요..
1. DHCP
1-1. 2번의 RTT, 4개의 DHCP메시지로 동작
서브넷 내 DHCP서버 중 하나로부터 일정 기간동안 사용 가능한 IP주소, 서브넷 마스크, GWR 주소, DNS서버 주소를 할당받는다.
1-2. 위 과정결과 현재 호스트는 src IP, src MAC addr를 알고 있다.
2. 브라우저에 도메인 이름(www.google.com) 입력
3. 자신의 ARP 테이블을 확인하여 GWR의 MAC주소가 있는지 확인한다.
3-1. 없을 경우 GWR의 IP주소를 포함한 ARP request 프레임을 브로드캐스트한다.
3-2. GWR로부터 MAC 주소를 응답받고 ARP 테이블에 추가한다.
4. DNS 질의 메시지를 생성하여 게이트웨이 라우터(디폴트 라우터)에 해당 도메인에 대한 IP주소가 있는지 확인한다(캐싱)
4-1. 없을 경우 루트 DNS 서버 - TLD서버(.com) - 책임 DNS 서버 순으로 질의문을 보내어 해당 도메인의 IP주소를 얻는다.
5. 애플리케이션 계층에서 TCP 연결을 위한 메시지를 생성 후 전송 계층으로 다중화한다.
6. 전송 계층에서 메시지에 출발지 port번호, 목적지 port번호(80)를 포함한 TCP헤더를 추가하여 세그먼트를 만든 후 네트워크 계층으로 내려보낸다.
7. 네트워크 계층에서 출발지 IP주소, 목적지 IP주소(구글)를 포함한 헤더를 추가하여 IP 데이터그램으로 만든 후 링크 계층으로 내려보낸다.
8. 링크 계층에서 출발지 MAC주소, 목적지 MAC주소(GWR)를 포함한 헤더를 추가하여 이더넷 프레임으로 만든 후 물리 계층으로 내려보내 전송한다.
(9. 만약 호스트가 스위치에 물려있을 경우 스위치에서는 스위치 테이블을 확인하여 다음 노드로 전송한다.)
10. 게이트웨이 라우터에 도착 시 포워딩 테이블을 확인하여 다음 링크로 전송한다.
이때 GWR은 받은 프레임을 분해 후 출발지 MAC주소와 목적지 MAC주소를 각각 GWR MAC addr, R1 MAC addr(다음 홉)로 다시 프레임을 만든다.
11. 이때 네트워크 주소 변환(NAT)를 한다. 사설 IP주소를 공인 IP주소로 변환하여 다음 노드로 전송한다.
12. 구글에 도착한 데이터그램은 src IP, port, dest IP, port로 식별하여 알맞은 소켓에 역다중화 된다.
13. TCP 연결이 완료 - HTTP 요청, 응답 메시지를 주고 받는다.
그럼 이제 tcp 관점에서 최대한 상세하게 설명해봐
먼저 요청을 보내기 위해 3way handshaking를 해야합니다. 따라서 TCP관점에서는 세그먼트 생성 시 TCP헤더안 SYN비트를 1로 하여 하위 계층으로 다중화합니다. TCP 연결이 완료되었다면 상위 계층에서 내려온 데이터를 세그먼트로 만들어줍니다. 이때 TCP헤더 순서번호 필드를 설정하고 하위계층으로 다중화합니다. 파이프라인 중 첫 세그먼트라면 타이머를 작동시킵니다? 서버측 전송계층에서 세그먼트를 수신하면 checksum비트로 오류를 검출하고 만약 검출되면 세그먼트를 버립니다. 오류가 없을 시 포트번호를 확인하여 역다중화 해줍니다.
데이터 손실과 에러없이 수신하였다면 다음 SN에 대한 ACK를 보냅니다.만약 중간에 세그먼트 하나가 손실되었다면 다음 세그먼트 부터는 버퍼에 저장하고 손실된 세그먼트 SN에 대한 ACK를 보냅니다.ACK를 수신받은 브라우저는 다음 세그먼트를 전송합니다.이때 수신 윈도우 필드의 사이즈를 보며 전송 속도를 제어합니다.만약 3개의 중복 ACK가 수신되면 빠른 재전송을 하여 트래픽 낭비를 방지합니다.또 혼합제어를 위해 윈도우 사이즈를 줄입니다.ACK가 손실되어 타임아웃이 되면 TCP는 세그먼트를 재전송합니다.이때 혼합제어를 위해 윈도우 사이즈를 줄입니다.
이건 너무 어려워서 막 적었어요..
그정도면 됐어
근데 진지하게 이거 알면 뭐가 도움됨? arp dhcp가 스프링에 쓰이는것도 아니고
개발 능력 향상에 도움되나요
이통사 개발자들은 dhcp서버 만지게 됨 유료가입자들한테 ip 할당해야되거든 arp 모르면 이 로직 짤수나 있겠음?
뭐보고 공부함?