[Tranport Layer 03] TCP의 연결 설정 Flow Control흐름제어란 receiver가 overflow되어 buffer에 넘치게 받은 정보를 받지 않도록 하며 receiver가 자신이 overflow되지 않을 만큼만 sender에게 알려주고, sender가 흘러넘치지 않은 정도의 정보로만 data를 전송하는 것을 목적으로 한다.receiver의 application이 갑자기 다른 일을 하느라 receiver의 buffer 빈 공간이 안만들어질 수 있다. 또는 reciver가 데이터를 받는 속도가 application이 data를 읽어가는 속도보다 빠를때 buffer가 가득 차는 상황이 발생할 수 있다. 이러한 정보는 recieve window라는 필드를 통해서 전송한다. (=rwnd field) TCP Connection management..
썸네일 [Transport Layer 02] TCP TCP의 특징TCP는 하나의 sender당 하나의 receiver가 소통하는 프로토콜이다. 또한 checksum을 통해 reliable을 보장하나, 이는 보안을 위한 목적이라기 보다는 정말 약한 확인정도에 불과하다. TCP는 누적 ACK를 사용해 정확히 받은 가장 마지막 seq numb만 전송하고, stop and wait 기법이 아닌 파이프라인 기법을 사용한다. 또한 연결 설정을 진행하며 data가 buffer의 size를 넘치지 않도록 flow control과 congestion control 을 사용한다. 또한 양방향으로 data전송이 가능한 full duplex data이다.   TCP segment structuresequence number : data부분에 들어가는 첫번째 byte에 들어가는..
썸네일 [Transport Layer 01] Pipelining, Go-Back-N, Selective repeat rdt 2.0, 2.1, 2.2, 3.0 을 배웠다. rdt의 stop and wait protocol의 경우 매우 비효율적이다. 미국의 동부 끝과 서부 끝에서 패킷을 주고받는다고 생각해볼때 하나의 패킷을 보내고, ACK가 올때까지 기다려야한다.다시 말해 물리적인 거리가 매우 긴 곳에서 stop and wait protocol을 이용해서 패킷을 주고받으면 propagation delay가 매우 클 것이기에 RTT가 길어져서 오랜 시간을 기다려야할것이다. 따라서 최악의 performance를 가질 것이다. Pipelining그러면 데이터 패킷을 하나 보내놓고 기다리지 않고 데이터 패킷을 여러 개 보내놓고 기다리면 좀 낫지 않을까?utilization을 구해서 비교해보자. 파이프라인이 적용되지 않는 util..
썸네일 [Linux] vi나 vim 에디터 없이 파일 수정 Background 개발 환경이 달라져서 환경세팅을 다시 하던 중에 homebrew는 설치되었으나 zshell에 path가 추가되지 않아서 zshrc에 들어가서 PATH를 추가해줘야 한다. 쉬운 방법으로는 vi ~/.zshrc 로 zshrc에 들어가서 (tmi. 뒤에 붙은 rc는 run commands이다. ) export PATH=/opt/homebrew/bin:$PATH 이 문장을 추가해 주고 ESC를 누르고 :wq를 누르고 엔터를 치고 나오면 된다. 이 오류는 Homebrew가 설치된 곳이 /usr/local/... 이 아니라 /opt/homebrew/ 위치에 설치되었기 때문이라 경로 설정을 해주는 것이다. 그런데 나는 이렇게 하기 싫었다. 까지가 Background이다. 굳이 vi나 vim을 써서..
썸네일 [Linux] ls: command not found Mac 사용자들이 terminal을 사용하다가 ls나 vi 와 같은 명령어를 써줄때, 갑자기 명령어가 작동하지 않는 순간이 있다. 무엇이 원인일까? mongodb와 관련된 코드의 에러를 해결하려던 중, mongodb 설치 경로를 읽기 전용이라 접근 불가능하다는 것으로 원인을 파악하여 쓰기 전용으로 권한을 변경하려했다. 그러기 위해서 .bash_profile에 가서 mongodb path를 잘못 설정해주었기때문에 발생했던 것이다. 어떻게 해결해야할까? 1. 당장의 PATH에서는 명령어가 작동하지 않기때문에 임시방편으로 PATH설정을 수동으로 해줘야한다. 다음의 명령어를 shell에 치면 ls나 vi와 같은 명령어가 제대로 작동할 수 있다. export PATH=%PATH:/bin:/usr/local/bin..