본문 바로가기

프로그래밍/네트워크

[Coursera Google] The Transport Layer - connection , connectionless

지금까지 연결 지향 (connection oriented) 프로토콜인 TCP 에 집중했다.

연결 지향 프로토콜은 

연결을 설정하고, 이걸 이용해 데이터가 적절하게 전송 되었는지 확인한다.

이렇게 하면, 연결된 양쪽은 항상 어떤 비트의 데이터가 확실히 전달 되었는지 아닌지를 알 수 있다.

 

A 지점에서 B 지점 으로 데이터를 가져오려고 하는 동안 잘못될 가능성이 있기 때문에

(낮은 레벨에서 비트는 특정 전압 범위 내의 전기 신호일 뿐이라는 것)

연결 중심의 프로토콜이 아주 중요하다.

단 한 비트라도 잘못 전송 되면 전체 프레임을 버리게 할 수가 있다.

 

또 트래픽이 회선 오류를 넘어 목적지에 도달하지 못할 수도 있다.

라우터가 트래픽 전달을 위해 우리의 트래픽을 떨어뜨릴 수도 있고,

광케이블이 절단 될 수 도 있다.

 

TCP 같은 연결 지향 프로토콜은 연결을 형성하고 지속적으로 ACK 스트림을 통해 이를 보호 할 수 있다.

 

IP와 이더넷 같이 네트워크 하위 모델에 있는 프로토콜들은 그들이 받은 모든 데이터가 정확한지 확인하기 위해 

체크섬을 사용한다.

하지만 이 체크를 통과하지 못한 데이터를 다시 보내려는 시도는 전혀 하지않는다.

그건 전부 전송 계층 프로토콜에 의해 보내지는 것이기 때문에

 

IP 또는 이더넷 수준에서 체크섬이 계산되지 않으면 데이터는 폐기한다.

이 데이터를 언제 다시 보낼지는 TCP 에 달려있다.

 

TCP는 전송되는 데이터의 모든 비트에 ACK 를 예상하므로,

어떤 데이터가 성공했는지 알 수 있는 가장 좋은 위치의 레이어고 필요할 경우 세그먼트를 다시 전송하기로 결정 할 수 있다.

 

시퀀스 번호가 중요한 이유는 TCP 는 일반적으로 모든 세그먼트를 순차적으로 전송하지만,

항상 그런 순서로 도착하지 않기 때문이다.

하위 계층의 오류로 세그먼트가 재분배 되어야 한다면 ,순서가 잘못되어서 도착할 수 있다.

이걸 시퀀스 번호가 모든 데이터를 올바른 순서로 다시 조합 할 수 있게 해준다.

 

자 근데 , TCP 같은 연결 지향 프로토콜은 많은 오버헤드가 발생한다.

연결을 설정해야되고, 계속 ACK 스트림을 보내야 되고 마지막 연결도 끊어야 한다.

이게 여분의 트래픽을 차지하게 된다.

 

이제 무연결 프로토콜과 비교해 볼 수 있다.

 

이것 중 대표적인건 UDP (사용자 데이터그램 프로토콜) 이다.

TCP 와 달리 UDP 는 연결하지 않고 ACK 라는 개념조차 없다.

UDP 에서는 대상 포트를 설정하고 패킷을 전송한다.

이건 아주 중요하지 않은 메시지에 유용하게 사용된다. (대표적으론 비디오 스트리밍이 있다.)

 

각각의UDP 데이터그램이 비디오의 단일 프레임이면 

프레임 한 두개가 없어도 비디오 관람의 크게 문제가 되진 않는다.

TCP 의 오버헤드를 없애면서 굉장히 고품질의 비디오를 전송 할 수 있게 된다.

 

 

 

 

 

방화벽

 

 

방화벽은 특정 기준을 충족하는 트래픽을 차단하는 장치다.

원하지 않는 트래픽을 차단해서 네트워크를 안전하게 유지하는게 목적

 

방화벽은 실제 네트워크의 다양한 계층에서 작동할 수 있다.

어플리케이션 계층의 트래픽 검사를 수행 할 수 있는 방화벽과

IP 주소의 차단 범위를 다루는 방화벽이 있다.