그에엑
기본숙제
4-1 확인문제 1번
IP와 연관된 통신 특성으로 알맞은 단어를 <보기>에서 골라보세요.
비신뢰성, 비연결형
IP를 통한 통신은 신뢰성을 보장하지 않기에 전송계층의 TCP프로토콜등을 활용해 신뢰성을 더한다.
4-2 확인문제 2번
ACK
쓰리웨이 핸드셰이크
송신측 시작한다고 초기순서번호 보내며 SYN 체크해서 보낸다.
수신측 그거 받았다고 ACK 보내며(다음에 받아야 할 것 보냄) 이쪽도 처음보내는거니까 자신의 SYN비트도 체크
송신측 해당 답장 받았다고 ACK.
추가숙제
탭이 너무 많이켜져있어서 크롬쪽 pid가 주르르르륵나와있다
내용정리
전송계층
네트워크계층을 통해 IP주소 기반 통신을하면 해당 공인주소까지는 받을 수 있지만
해당 내부망에 어떤 기기인지, 그 기기의 어떤 애플리케이션에 전달하는지 알 수 없다.
이 두가지를 해결하기위해 전송계층의 포트번호를 활용해 애플리케이션의 PID와 연결하고
포트기반의 NAT인 NAPT를 통해 NAT 변환 테이블에 포트번호까지 추가해 내부망의 특정 기기로
연결되도록 해줄 수 있다.
외부에서 1.1.1.1:1234 로 오면 NAT에서 123.123.123.123:135 로 변환해주어
IP로 기기를 찾고 바뀐 포트번호로 해당 기기 내 애플리케이션을 찾을 수 있는것.
포트포워딩
원래같으면 내부망에서 먼저 외부 서버로 요청할것이기에 NAT에 변환테이블이 기록되겠지만
외부에서 먼저 접근할 상황을 대비해 공인IP로 받아서 어디로갈지 알 수가 없다. 그렇기에 공유기에 포트포워딩을
설정해두어 공인IP의 어떤 포트로 오면 내부망 사설IP의 어느포트로 보낼지 미리 설정해두어야 한다.
네트워크계층에서 IP주소 기반 통신은 신뢰성이 없고 비연결성 통신을 수행했다.
이 두가지를 해결하기 위한 방법으로 전송계층의 TCP 프로토콜이있다.
TCP
TCP에서는 쓰리웨이 핸드셰이크를 통해 연결을 수립하고 통신한다.
헤더까지 패킷의 최대 크기를 따졌던 네트워크 계층의 MTU와 다르게 전송계층에서는
페이로드의 크기만 고려해서 세그먼트의 최대크기인 MSS를 지정한다.
응용계층의 데이터를 MSS단위로 나누고 세그먼트를 쪼갠다.
맨 처음 세그먼트에 무작위 순서번호가 붙고, 이 초기 순서번호를 기반으로 세그먼트의 크기를 더한만큼
다음 순서번호가 차례대로 세그먼트에 붙는다.
SYN세그먼트에 초기 순서번호가 들어가고 헤더에 SYN비트로 표시한다
그에대한 응답으로 잘받았다는 ACK비트를 표시하고 첫송신이기에 SYN비트도 표시하며
A에게 받을 그 다음 순서번호를 보내서 해당 정보를 달라고 요청을 함께한다.
연결 종료시에는 송수신호스트가 각자 한번씩 종료를 의미하는 FIN 세그먼트와
확인 ACK세그먼트를 한번씩 보내면서 총 네번의 송신으로 마무리한다.
UDP에서는 포트와 데이터그램길이, 체크섬만 표시되기에
해당 데이터그램이 훼손됐는지 체크섬은 확인 가능하지만, 상대에게 잘 전달됐는지는 확인불가
신뢰성
신뢰성 보장 위해 잘 도착했는지 에러가 났는지 확인해야한다.
지정된 RTT 시간을 넘겨 타임아웃이 발생하거나
수신측에서 동일한 요구 ACK 세그먼트가 여러번 오면 에러라고 판별해 처리한다.
ICMP
신뢰성 보장을 보조하기 위한 프로토콜
중간 라우터에서 문제가 생길경우, TTL이 만료가되었거나, 어디로갈지몰라서 호스트 도달불가
포트 도달불가와 단편화가필요하지만 해당 비트를 확인하니 단편화를 막아놨거나
하는 상황에 맞는 코드를 라우터에서 호스트에게 돌려준다.
GO-BACK-N ARQ
1,2,3번에 대한 ACK가 왔지만 4번의 ACK는 누락되고 5,6 번의 ACK가 온 상황.
4번이 타임아웃 발생. 뒤 세그먼트의 ACK를 폐기하고 4번부터 쭉 재전송한다. (누적확인)
동일한 ACK 세번을 받아도 에러로 판별한다.
Selective Repeat ARQ (이것이 가능하다면 이것우선)
문제가 생긴 세그먼트에 대해서만 재전송한다.
흐름제어
수신측의 버퍼를 넘겨서 계속 보내면 버퍼오버플로우가 발생할 수 있다.
송수신 호스트가 파이프라이닝할 수 있는 최대량인 윈도우의 크기를 파악해 흐름을 제어한다.
수신측에서 TCP헤더의 윈도우필드를 통해 송신측에 알려주고
송신측도 이 정보를 바탕으로 윈도우를 설정해 ACK를 받을때마다 한칸씩 세그먼트 목록을
한칸씩 밀면서 윈도우의 크기만큼 보낸다.
혼잡제어
라우터에 통신이 몰려서 문제가 생길 경우를 대비하기 위한 혼잡제어
혼잡제어 알고리즘
기본적으로 AIMD (합으로 증가하고 곱으로 감소한다)
느린시작
혼잡 윈도우를 1부터 시작해서 문제없이 ACK를 받으면 1씩키운다.
응답 하나마나 윈도우 하나씩 키우므로 1RTT마다 윈도우가 두배가 되는것.
시작할때 느린시작 임계치를잡는다 (slow start threshold)
혼잡회피
1RTT마다 윈도우를 1칸만 증가시키는 알고리즘. 임계치를 넘으면 혼잡발생우려 크므로 이런식으로.
빠른회복
3회 중복 ACK 수신시에 빠르게 전송률을 회복하기 위해 느린시작은 건너뛰고 혼잡회피를 수행한다.
빠른회복 도중 타임아웃 발생시 윈도우크기를 1로하고 임계치를 절반으로해 느린시작을 수행한다.
타임아웃 발생시
윈도우의크기를 1로지정, 느린시작 임계치를 타임아웃 발생시점 절반으로 초기화 후
다시 느린시작
임계치를 넘은경우
느린시작을 종료하고 윈도우를 절반으로 한 뒤 혼잡회피
세번의 중복 ACK
빠른회복 수행. 임계치를 그 시점의 절반으로 하고 그 임계치지점부터 혼잡회피를 하는것.
ECN
혼잡제어를 중간라우터에게 도움받는것. 송수신부 모두에서 ECN을 지원할경우
ECN비트를 사용한다. 라우터에서 보니 혼잡한것 같으면 해당 패킷에 ECN을 체크해주고
수신부에서 라우터가 ECN 비트를 설정한 것을 확인하면 송신부에 돌려줄 때 이것을 알려준다.
중복 ACK나 타임아웃 발생 전에 빠르게 확인하고 혼잡제어를 효율적으로 할 수 있게된다.